我尝试使用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'
答案 0 :(得分:2)
问题是time
上的时区无意义没有关联日期;假设您在美国/太平洋时区有一个约会,这不是一个固定的补偿;实际调整取决于time
应该发生的确切日期。
正如您所注意到的,如果US/Pacific
原样使用localize
,datetime
,tzinfo
默认情况下,tzinfo
对象是指历史时区即使是整整几个小时也没有与当前UTC相抵消,但有些分数;这是因为datetime
个实例不知道他们正在调整的time
; time
会出现同样的问题。
最好的做法是不要为datetime
使用时区;当需要时区计算时,您可以添加将其与本地化的{{1}}对象合并。