Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python datetime对象的dst(再次)_Datetime_Python 3.x - Fatal编程技术网

python 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) 在这两种

在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)
在这两种情况下.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))