在python中指定时区感知时间

时间:2015-02-20 20:09:37

标签: python datetime timezone

我尝试使用datetime.time对象在python中指定一组时区感知时间。但是,pytz库似乎并没有很好地支持这一点:使用US / Pacific返回奇怪的时区,这是UTC时间53分钟

>>> datetime.time(10, 52, tzinfo=pytz.timezone("US/Pacific"))
datetime.time(10, 52, tzinfo=<DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)

支持的方法似乎是对datetime.datetime对象使用datetime.localize,但datetime.time对象不支持

>>> pytz.timezone("US/Pacific").localize(datetime.datetime(2011, 6, 27, 2, 0, 0))
datetime.datetime(2011, 6, 27, 2, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)
>>> pytz.timezone("US/Pacific").localize(datetime.time(10, 45))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/bar/.virtualenvs/foo/lib/python2.7/site-packages/pytz/tzinfo.py", line 309, in localize
    loc_dt = dt + delta
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

1 个答案:

答案 0 :(得分:2)

问题是time上的时区无意义没有关联日期;假设您在美国/太平洋时区有一个约会,这不是一个固定的补偿;实际调整取决于time应该发生的确切日期

正如您所注意到的,如果US/Pacific原样使用localizedatetimetzinfo默认情况下,tzinfo对象是指历史时区即使是整整几个小时也没有与当前UTC相抵消,但有些分数;这是因为datetime个实例不知道他们正在调整的time; time会出现同样的问题。

最好的做法是不要为datetime使用时区;当需要时区计算时,您可以添加将其与本地化的{{1}}对象合并。