问题描述
当我运行以下代码时;
tz_Pacific = pytz.timezone('US/Pacific')
tz_Tasmania = pytz.timezone('Australia/Tasmania')
time1 = datetime(2020,10,7,18,tzinfo=tz_Pacific)
time2 = datetime(2020,14,20,21,tzinfo=tz_Tasmania)
print(time1)
print(time2)
我得到以下输出;
2020-10-07 18:00:00-07:53
2020-10-07 14:20:21+09:49
为什么tz偏移分别为-07:53和+09:49?
解决方法
为什么要使用pytz
获得这些“奇怪的”偏移量:这些是相应时区数据库中的第一项。使用pytz
,如果不进行本地化,则不会将其调整为datetime对象的时间。这是Paul Ganssle的nice blog post,提供了更多见解。
from datetime import datetime
import pytz
tz_Pacific = pytz.timezone('US/Pacific')
tz_Tasmania = pytz.timezone('Australia/Tasmania')
print(repr(tz_Pacific))
print(repr(tz_Tasmania))
# <DstTzInfo 'US/Pacific' LMT-1 day,16:07:00 STD> # note the LMT for local mean time...
# <DstTzInfo 'Australia/Tasmania' LMT+9:49:00 STD>
time1 = tz_Pacific.localize(datetime(2020,10,7,18,0))
time2 = tz_Tasmania.localize(datetime(2020,14,20,21))
print(time1)
print(time2)
# 2020-10-07 18:00:00-07:00
# 2020-10-07 14:20:21+11:00
从pytz
will be deprecated开始,随着Python 3.9的发布,暂时使用dateutil
:
from datetime import datetime
from dateutil.tz import gettz
tz_Pacific = gettz('US/Pacific')
tz_Tasmania = gettz('Australia/Tasmania')
time1 = datetime(2020,tzinfo=tz_Pacific)
time2 = datetime(2020,21,tzinfo=tz_Tasmania)
print(time1)
print(time2)
# 2020-10-07 18:00:00-07:00
# 2020-10-07 14:20:21+11:00
使用Python 3.9,您将zoneinfo作为标准库的一部分来实现。