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()"生成的同一时间,并且时区没有改变,有人请向我解释为什么会发生这种情况?谢谢!
而不是分配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