时区偏移量不打印到四舍五入

问题描述

当我运行以下代码时;

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作为标准库的一部分来实现。