Datetime中offset-naive与offset-aware时间的计算
在使用Django时,默认是开启对多时区的支持的,在获取时间的时候会是如下形式:
datetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=<UTC>)
我们可以利用django.utils.timezone中提供的localtime方法来将该时间转换为本地时间:
| 1 2 3 4 | >>> dtdatetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=<UTC>)>>> localtime(dt)datetime.datetime(2014, 4, 18, 23, 37, 7, tzinfo=<LocalTimezone>) | 
有时候,我们需要将该时间与当前时间做比较,例如计算差值,你可能会想到直接这么做:
| 1 2 3 | >>> importdatetime>>> now =datetime.datetime.now()>>> now -dt | 
不过这是不对的,并告知如下错误:
| 1 2 3 | Traceback (most recent call last):  File"<console>", line 1, in<module>TypeError: can't subtract offset-naive andoffset-aware datetimes | 
问题就出在利用datetime.datetime.now()得到的当前时间是offset-naive的,而另外一个却是offset-aware的,因此我们需要将这里的dt转成与now一样的形式,可以这么做:
| 1 2 3 4 5 | >>> dt =dt.replace(tzinfo=None)>>> dtdatetime.datetime(2014, 4, 18, 15, 37, 7)>>> now -dtdatetime.timedelta(0, 34108, 443000) | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号