我正试图使用datetime.time对象在python中指定一组时区感知时间。然而,pytz库似乎并没有很好地支持这一点:使用美国/太平洋返回一个奇怪的时区,该时区与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'
问题是,在没有相关日期的情况下,time
上的时区是无意义的;假设你的日期在美国/太平洋时区,这不是一个恒定的偏移;实际调整取决于CCD_ 2应该发生的确切日期。
正如您所注意到的,对于datetime
,如果您按原样使用US/Pacific
,而不使用localize
,则默认情况下,tzinfo
对象指的是与当前UTC偏移的历史时区,即使偏移了整整一个小时,也没有偏移一些分数;那是因为CCD_ 7实例不知道它们正在调整的CCD_;CCD_ 9也会出现同样的问题。
最好的做法是不使用time
的时区;当需要进行时区计算时,可以添加并将其与本地化的datetime
对象合并。