具有相同时区但不同的utcoffset()的Datetime对象

时间:2015-03-13 15:44:17

标签: python django datetime

在我的django应用程序中,我面对两个日期时间对象(self.dueDate是日期对象):

ref_time = timezone.localtime(timezone.now(), timezone.get_default_timezone() )
threshold = datetime.combine( self.dueDate, 
                               time(tzinfo=timezone.get_default_timezone())) 
           - timedelta(days = 1) 

我将它们构建为具有相同的时区(它们具有相同的时区),但它们最终会有两个不同的UTC偏移量。

>>>print threshold, threshold.tzinfo
2015-03-13 12:08:00+00:50 Europe/Rome 
>>>print ref_time, ref_time.tzinfo
2015-03-13 12:48:29.372984+01:00 Europe/Rome

为什么会这样?如何才能为同一个tz提供两种不同的偏移量? (为什么那会是50分钟?)

1 个答案:

答案 0 :(得分:0)

时区在不同时间可能具有不同的utc偏移。 time(tzinfo=tz)使用默认的utc偏移量,例如,对于最有可能您想要的最早日期。见:

要将tz时区中的当前时间作为有意识的日期时间对象:

from datetime import datetime

ref_time = datetime.now(tz)

要将self.dueDate前一天的午夜作为有意识的日期时间对象:

from datetime import time as datetime_time, timedelta
from django.utils import timezone

midnight_yesterday = datetime.combine(self.dueDate, datetime_time()) - timedelta(1)
threshold = timezone.make_aware(midnight_yesterday)

注意:threshold可能多于/少于24小时前,请参阅How can I subtract a day from a python date?