【发布时间】:2017-01-15 18:50:48
【问题描述】:
我从一个人那里得到YYYY-MM-DD HH:MM:SS 格式的输入,我知道它应该是洛杉矶当地时间。在 Python 中,如何将其转换为明确且正确的 datetime.datetime 对象?我知道在 DST 的秋季过渡期间输入不明确;只要是确定性的,我可以在那一小时内对日期进行任何选择。
这是我的尝试,我惊讶地发现它不起作用:
>>> import pytz
>>> from dateutil import parser as date_parser
>>> PACIFIC = pytz.timezone('US/Pacific')
>>> result = date_parser.parse('2016-08-01 00:00:00 FOO', tzinfos={'FOO': PACIFIC})
>>> result.utcoffset()
datetime.timedelta(-1, 57600)
>>> str(result)
'2016-08-01 00:00:00-08:00'
尽管要求 US/Pacific 并且这是一个夏季约会,但我得到的是 UTC-8 而不是 UTC-7。
【问题讨论】:
-
这里的问题是
pytz时区不能像这样轻易附加。您需要在返回的datetime.datetime对象上使用PACIFIC.localize()。如果您对所有日期都使用一个已知时区,请不要打扰tzinfos。 -
哦,还有,如果你知道日期和时区的格式,就不要用
dateutil.parser,效率低,而且不强制格式(所以格式上的错误仍然可能产生一个日期,但一个不正确的)。使用datetime.strptime -
谢谢@Paul;你介意把它变成一个可行的例子作为答案吗?
-
我可以,但我目前不在国内,所以可能需要几天时间。如果其他人想接受这个想法并坚持下去,我不会被冒犯。有关现有工作示例,请参阅 this page on documentation。
标签: python datetime python-datetime python-dateutil