python datetime对象的dst(再次)
在python3.4中,如果我创建了一个时区感知的datetime对象,那么如何确定给定的日期是夏季(dst)还是冬季 例如:python datetime对象的dst(再次),datetime,python-3.x,Datetime,Python 3.x,在python3.4中,如果我创建了一个时区感知的datetime对象,那么如何确定给定的日期是夏季(dst)还是冬季 例如: local_time = pytz.timezone('Europe/Berlin') time_winter = datetime.datetime(2014, 11, 26, 10, tzinfo=local_time) time_summer = datetime.datetime(2014, 7, 26, 10, tzinfo=local_time) 在这两种
local_time = pytz.timezone('Europe/Berlin')
time_winter = datetime.datetime(2014, 11, 26, 10, tzinfo=local_time)
time_summer = datetime.datetime(2014, 7, 26, 10, tzinfo=local_time)
在这两种情况下.dst()都返回off:
>>> datetime.timedelta(0)
而且.tzname()和.tzinfo()总是相同的
原则上,对象知道时区和dst,但有时:
cet_winter = pytz.timezone('CET') # CET is without dst
datetime.datetime(2014,7 , 26, 10, tzinfo=local_time).astimezone(cet_winter)
>>> datetime.datetime(2014, 7, 26, 11, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>)
datetime.datetime(2014,11, 26, 10, tzinfo=local_time).astimezone(cet_winter)
>>> datetime.datetime(2014, 11, 26, 10, 0, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>)
cet_winter=pytz.timezone('cet')#cet没有dst
datetime.datetime(2014,7,26,10,tzinfo=当地时间)。astimezone(cet\U冬季)
>>>datetime.datetime(2014,7,26,11,0,tzinfo=)
datetime.datetime(2014,11,26,10,tzinfo=当地时间)。astimezone(cet\U冬季)
>>>datetime.datetime(2014,11,26,10,0,tzinfo=)
这里显示了夏季和冬季之间的差异。。。
对UTC执行同样的操作,它将不起作用
datetime.datetime(2014,11, 26, 10, tzinfo=local_time).astimezone(pytz.timezone('UTC'))
>>> datetime.datetime(2014, 11, 26, 9, 0, tzinfo=<UTC>)
datetime.datetime(2014,11, 26, 10, tzinfo=local_time).astimezone(pytz.timezone('UTC'))
>>> datetime.datetime(2014, 11, 26, 9, 0, tzinfo=<UTC>)
datetime.datetime(2014,11,26,10,tzinfo=local_time).astimezone(pytz.timezone('UTC'))
>>>datetime.datetime(2014,11,26,9,0,tzinfo=)
datetime.datetime(2014,11,26,10,tzinfo=当地时间).astimezone(pytz.timezone('UTC'))
>>>datetime.datetime(2014,11,26,9,0,tzinfo=)
我是否从根本上错过了一些东西,或者我是否需要使时区对象与时间相关?您需要在时区对象上使用
本地化
:
>>> local_time.localize(datetime.datetime(2014, 11, 26, 10)).dst()
datetime.timedelta(0)
>>> local_time.localize(datetime.datetime(2014, 7, 26, 10)).dst()
datetime.timedelta(0, 3600)
.localize()
和.normalize()
都用于确保正确完成转换并考虑DST(请参见)。另请参见:只是为了补充一点,因为我第一次误解了:如果您的时区有DST,您可能不会将您的时区简单地设置为tz参数,但您必须通过localize传递它。我的问题中的初始化是错误的,它需要是:time\u winter=local\u time.localize(datetime.datetime(2014,11,26,10))