在python中指定时区感知时间
我试图使用datetime.time对象在python中指定一组时区感知时间。然而,pytz库似乎并没有很好地支持这一点:使用US/Pacific返回一个奇数时区,它与UTC相差53分钟在python中指定时区感知时间,python,datetime,timezone,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.time(10, 52, tzinfo=pytz.timezone("US/Pacific"))
datetime.time(10, 52, tzinfo=<DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
>>datetime.time(10,52,tzinfo=pytz.timezone(“美国/太平洋”))
datetime.time(10,52,tzinfo=)
支持的方法似乎是对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'
pytz.timezone(“美国/太平洋”).本地化(datetime.datetime(2011,6,27,2,0,0))
datetime.datetime(2011,6,27,2,0,tzinfo=)
>>>pytz.时区(“美国/太平洋”).本地化(datetime.time(10,45))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/bar/.virtualenvs/foo/lib/python2.7/site packages/pytz/tzinfo.py”,第309行,本地化
loc_dt=dt+delta
TypeError:不支持+:“datetime.time”和“datetime.timedelta”的操作数类型
问题是时区在
时间上没有意义,没有相关日期;假设你有一个美国/太平洋时区的日期,这不是一个固定的偏移量;实际调整取决于时间
预计发生的确切日期
正如您所注意到的,如果您按原样使用美国/太平洋
,而不使用本地化
,则对于日期时间
,默认情况下tzinfo
对象指的是历史时区,该时区即使按整小时也不与当前UTC偏移,而是某些分数;这是因为tzinfo
实例不知道它们正在调整的datetime
;时间
也会出现同样的问题
最好的做法是不要在时间使用时区
;当需要进行时区计算时,您可以添加并将其与本地化的datetime
对象合并。如果您没有与时间关联的日期,则无论您使用哪种类别,您都会在夏令时方面遇到问题。确切地说,这也没有其他问题的答案。事实并非如此。Python确实支持tzinfo
对象的time
,还有datetime
对象的timetz()
,因此您可以拥有适当的偏移感知time
对象。在我看来,just pytz不支持时间对象的tzinfo
。工作:print(time(hour=14,minute=0,tzinfo=timezone(timedelta(hours=-4))
不工作:print(time(hour=14,minute=0,tzinfo=pytz.timezone('US/Eastern'))
@DmitryMugtasimov显然你忽略了我在回答中所说的一切。这就是如何将时间对象转换为可用的时区:from datetime import timezone,timedelta,datetime;时区(timedelta(seconds=datetime.now(tzinfo).utcoffset().total_seconds()))