在 python 中指定时区感知时间
Specifying timezone aware times in python
我正在尝试使用 datetime.time 对象在 python 中指定一组时区感知时间。然而,pytz 库似乎并没有很好地支持这一点:使用 US/Pacific returns 一个奇数时区,它比 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
的时区 毫无意义 ,没有关联的日期;假设你在 US/Pacific 时区有一个日期,这不是一个常量偏移量;实际调整取决于 日期 ,time
应该发生。
如您所见,如果您按原样使用 US/Pacific
而没有 localize
,对于 datetime
,默认情况下 tzinfo
对象指的是历史时区这甚至没有被当前的 UTC 抵消整小时,而是一些分数;那是因为 tzinfo
实例不知道它们正在调整的 datetime
; time
.
也会出现同样的问题
最好的做法是不为 time
使用时区;当需要时区计算时,您可以将其与本地化的 datetime
对象合并。
我正在尝试使用 datetime.time 对象在 python 中指定一组时区感知时间。然而,pytz 库似乎并没有很好地支持这一点:使用 US/Pacific returns 一个奇数时区,它比 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
的时区 毫无意义 ,没有关联的日期;假设你在 US/Pacific 时区有一个日期,这不是一个常量偏移量;实际调整取决于 日期 ,time
应该发生。
如您所见,如果您按原样使用 US/Pacific
而没有 localize
,对于 datetime
,默认情况下 tzinfo
对象指的是历史时区这甚至没有被当前的 UTC 抵消整小时,而是一些分数;那是因为 tzinfo
实例不知道它们正在调整的 datetime
; time
.
最好的做法是不为 time
使用时区;当需要时区计算时,您可以将其与本地化的 datetime
对象合并。