Python时区偏移错误?

时间:2015-06-17 20:11:55

标签: python datetime timezone

我正在编写一个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

结果是:

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

正如你所看到的那样,本地时间的偏移是" -05:00",它没有任何问题,但是当我创建一个具有相同时区的自定义日期时间对象时:

date = datetime(2015, 6, 17, 14, 58, 45, tzinfo=get_localzone())

结果变为:

Timezone: America/Chicago
Local time: 2015-06-17 14:58:45-05:51

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

1 个答案:

答案 0 :(得分:9)

使用pytz中的tzinfo方法,而不是分配localize参数。

tz = get_localzone()
date = tz.localize(datetime(2015, 6, 17, 14, 58, 45))

这在the pytz documentation中突出讨论,从第一个" Note"开始。框,以及第一个代码示例。

它也显示在the tzlocal documentation中,这是(我假设)你的get_localzone()方法的来源。

仅供参考,-05:51偏移量来自America/Chicago时区的原始LMT值,即-05:50:36,并且假定其已被使用1883年as shown here。它四舍五入到最接近的分钟,在Python中给出-05:51 LMT值。您正在看到该偏移,因为没有调用localize方法,因此pytz只是使用该时区条目已知的第一个偏移量。