Python时区偏移错误?

Yue*_* Li 6 python timezone datetime

我正在编写一个python脚本,其中包含两行代码,将传递给方法的日期转换为UTC时间:

print "Timezone: %s" % get_localzone()
date = datetime.now(tz=get_localzone())
print "Local time: %s" % date
utc = pytz.utc
utc_date = date.astimezone(utc)
print "UTC date: %s" % utc_date
Run Code Online (Sandbox Code Playgroud)

结果是:

Timezone: America/Chicago
Local time: 2015-06-17 14:58:45.224827-05:00
UTC date: 2015-06-17 19:58:45.224827+00:00
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,本地时间的偏移量为"-05:00",没有任何问题,但是当我使用相同的时区创建自定义日期时间对象时:

date = datetime(2015, 6, 17, 14, 58, 45, tzinfo=get_localzone())
Run Code Online (Sandbox Code Playgroud)

结果变成:

Timezone: America/Chicago
Local time: 2015-06-17 14:58:45-05:51
Run Code Online (Sandbox Code Playgroud)

偏移从"-05:00"变为"-05:51".我甚至使用第一个"datetime.now()"生成的同一时间,并且时区没有改变,有人请向我解释为什么会发生这种情况?谢谢!

Mat*_*int 9

而不是分配tzinfo参数,使用localizepytz中的方法.

tz = get_localzone()
date = tz.localize(datetime(2015, 6, 17, 14, 58, 45))
Run Code Online (Sandbox Code Playgroud)

这在pytz文档中突出讨论,从第一个"注释"框开始,在第一个代码示例中.

它也显示在tzlocal文档中,这是(我假设)你的get_localzone()方法来自哪里.

仅供参考,-05:51偏移来自时区的原始LMT值,该值假定在1883年已经使用,如此处所示.它四舍五入到最接近的分钟,以Python形式给出LMT值.您正在看到该偏移量,因为未调用localize方法,因此pytz只使用该时区条目已知的第一个偏移量.America/Chicago-05:50:36-05:51