【问题标题】:How to convert "Thu Jun 5 10:59:10 CDT 2014" into python datetime object?如何将“Thu Jun 5 10:59:10 CDT 2014”转换为 python 日期时间对象?
【发布时间】:2014-06-05 16:00:20
【问题描述】:

如何将“Thu Jun 5 10:59:10 CDT 2014”转换为 python 日期时间对象?

由于 CDT,我似乎无法让它工作。 %Z 因为那是抛出错误:(

【问题讨论】:

标签: python date


【解决方案1】:

您不能使用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)

【讨论】:

  • +1 用于解释他的实际问题,而不仅仅是提供某种解决方法......:P
  • 我认为文档中列出的时区值只是示例,而不是详尽的列表。我发现strptime 的格式字符串与您的相似(我使用%X 而不是%H:%M:%S)适用于CDT(这是我的时区)和UTC(虽然没有执行时间转换)但在其他时区失败。
  • @FredLarson %X 是%H:%M:%S 的快捷方式。你确定CDT?你不是用pytz吗?
  • 我做了datetime.strptime(ds, '%a %b %d %X %Z %Y')。对pytz 一无所知。 CDT、CST、UTC 和 GMT 都被接受。我也尝试过 EDT、EST、PDT 和 PST。这些对我来说都失败了,除了你展示的同样的例外。
【解决方案2】:

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)

(虽然我不认为它处理时区很正确......但它肯定会解析它......)

【讨论】:

    猜你喜欢
    • 2020-01-25
    • 2013-10-19
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2014-12-19
    • 2023-01-24
    • 2010-12-06
    相关资源
    最近更新 更多