【发布时间】:2014-06-05 16:00:20
【问题描述】:
如何将“Thu Jun 5 10:59:10 CDT 2014”转换为 python 日期时间对象?
由于 CDT,我似乎无法让它工作。 %Z 因为那是抛出错误:(
【问题讨论】:
-
请提供minimal, working example 和完整的错误回溯。
如何将“Thu Jun 5 10:59:10 CDT 2014”转换为 python 日期时间对象?
由于 CDT,我似乎无法让它工作。 %Z 因为那是抛出错误:(
【问题讨论】:
您不能使用datetime 中的常用方法在此处构造对象。如mentioned in the documentation,strptime只能与(empty), UTC, EST, CST一起使用:
>>> datetime.datetime.strptime("Thu Jun 05 10:59:10 UTC 2014", "%a %b %d %H:%M:%S %Z %Y")
datetime.datetime(2014, 6, 5, 10, 59, 10)
>>> datetime.datetime.strptime("Thu Jun 05 10:59:10 CDT 2014", "%a %b %d %H:%M:%S %Z %Y")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data 'Thu Jun 05 10:59:10 CDT 2014' does not match format '%a %b %d %H:%M:%S %Z %Y'
你需要take a look at python-dateutil,它会将对象解析成一个naive datetime对象(它不考虑时区...):
>>> from dateutil import parser
>>> parser.parse("Thu Jun 5 10:59:10 CDT 2014")
datetime.datetime(2014, 6, 5, 10, 59, 10)
【讨论】:
strptime 的格式字符串与您的相似(我使用%X 而不是%H:%M:%S)适用于CDT(这是我的时区)和UTC(虽然没有执行时间转换)但在其他时区失败。
%X 是%H:%M:%S 的快捷方式。你确定CDT?你不是用pytz吗?
datetime.strptime(ds, '%a %b %d %X %Z %Y')。对pytz 一无所知。 CDT、CST、UTC 和 GMT 都被接受。我也尝试过 EDT、EST、PDT 和 PST。这些对我来说都失败了,除了你展示的同样的例外。
dateutil 可以毫不费力地解析大多数日期格式
$ easy_install dateutil
>>> from dateutil import parser
>>> parser.parse("Thu Jun 5 10:59:10 CDT 2014")
datetime.datetime(2014, 6, 5, 10, 59, 10)
(虽然我不认为它处理时区很正确......但它肯定会解析它......)
【讨论】: