Pytz Python 时区转换无效
Pytz Python Timezone Conversion Not Working
我正在尝试将 "Europe/London" pytz 时区转换为 UTC,但没有成功:
>>>tz=pytz.timezone("Europe/London")
>>>date=datetime.datetime(2015,1,1,4,4)
>>>tz.normalize(tz.localize(date)).astimezone(pytz.utc)
datetime.datetime(2015, 1, 1, 4, 4, tzinfo=<UTC>)
>>>tz.localize(date)
datetime.datetime(2015, 1, 1, 4, 4, tzinfo=<DstTzInfo 'Europe/London'GMT0:00:00 STD>)
这完全是错误的,为什么正上方的线在 GMT-0 而应该是 GMT+1。由于夏令时,伦敦时间目前比 UTC 早一小时,但代码并未生成此时间。
>>>tz.normalize(tz.localize(date)).astimezone(pytz.utc) #should produce:
datetime.datetime(2015, 1, 1, 3, 4, tzinfo=<UTC>)
你不应该指望伦敦的北半球一月是夏季。
pytz-2015.4
版本产生相同(正确)的结果:
>>> from datetime import datetime
>>> import pytz
>>> d = datetime(2015, 1, 1, 4, 4)
>>> tz = pytz.timezone('Europe/London')
>>> tz.localize(d, is_dst=None).astimezone(pytz.utc)
datetime.datetime(2015, 1, 1, 4, 4, tzinfo=<UTC>)
>>> tz.localize(d, is_dst=None)
datetime.datetime(2015, 1, 1, 4, 4, tzinfo=<DstTzInfo 'Europe/London' GMT0:00:00 STD>)
zdump
在我的系统上同意它:
$ zdump -v Europe/London | grep 2015
Europe/London Sun Mar 29 00:59:59 2015 UT = Sun Mar 29 00:59:59 2015 GMT isdst=0 gmtoff=0
Europe/London Sun Mar 29 01:00:00 2015 UT = Sun Mar 29 02:00:00 2015 BST isdst=1 gmtoff=3600
Europe/London Sun Oct 25 00:59:59 2015 UT = Sun Oct 25 01:59:59 2015 BST isdst=1 gmtoff=3600
Europe/London Sun Oct 25 01:00:00 2015 UT = Sun Oct 25 01:00:00 2015 GMT isdst=0 gmtoff=0
即,直到 2015 年 3 月 29 日,伦敦的 utc 偏移量为零。
我正在尝试将 "Europe/London" pytz 时区转换为 UTC,但没有成功:
>>>tz=pytz.timezone("Europe/London")
>>>date=datetime.datetime(2015,1,1,4,4)
>>>tz.normalize(tz.localize(date)).astimezone(pytz.utc)
datetime.datetime(2015, 1, 1, 4, 4, tzinfo=<UTC>)
>>>tz.localize(date)
datetime.datetime(2015, 1, 1, 4, 4, tzinfo=<DstTzInfo 'Europe/London'GMT0:00:00 STD>)
这完全是错误的,为什么正上方的线在 GMT-0 而应该是 GMT+1。由于夏令时,伦敦时间目前比 UTC 早一小时,但代码并未生成此时间。
>>>tz.normalize(tz.localize(date)).astimezone(pytz.utc) #should produce:
datetime.datetime(2015, 1, 1, 3, 4, tzinfo=<UTC>)
你不应该指望伦敦的北半球一月是夏季。
pytz-2015.4
版本产生相同(正确)的结果:
>>> from datetime import datetime
>>> import pytz
>>> d = datetime(2015, 1, 1, 4, 4)
>>> tz = pytz.timezone('Europe/London')
>>> tz.localize(d, is_dst=None).astimezone(pytz.utc)
datetime.datetime(2015, 1, 1, 4, 4, tzinfo=<UTC>)
>>> tz.localize(d, is_dst=None)
datetime.datetime(2015, 1, 1, 4, 4, tzinfo=<DstTzInfo 'Europe/London' GMT0:00:00 STD>)
zdump
在我的系统上同意它:
$ zdump -v Europe/London | grep 2015
Europe/London Sun Mar 29 00:59:59 2015 UT = Sun Mar 29 00:59:59 2015 GMT isdst=0 gmtoff=0
Europe/London Sun Mar 29 01:00:00 2015 UT = Sun Mar 29 02:00:00 2015 BST isdst=1 gmtoff=3600
Europe/London Sun Oct 25 00:59:59 2015 UT = Sun Oct 25 01:59:59 2015 BST isdst=1 gmtoff=3600
Europe/London Sun Oct 25 01:00:00 2015 UT = Sun Oct 25 01:00:00 2015 GMT isdst=0 gmtoff=0
即,直到 2015 年 3 月 29 日,伦敦的 utc 偏移量为零。