Python 解析日期格式,忽略字符串部分

13 投票
4 回答
20058 浏览
提问于 2025-04-16 06:17

我想解析这种格式的日期,但想忽略字符串中的某些部分。比如 'Wed, 27 Oct 1770 22:17:00 GMT'。我了解到,datetime 对时区的支持不是很好。这没关系,我其实只想忽略字符串中的时区部分,而不想对它进行字符串处理。有没有什么可以替换 %Z 的方法,让它表示“这里可以是任何字符串”,然后这样解析日期?另外,我不明白为什么它能解析像 PST、GMT 这样的时区,但却不能解析 EST。不管怎样,它似乎都不会附加 tzinfo,我也不太清楚 %Z 部分到底在寻找什么样的字符串。

>>> import datetime
>>> y = datetime.datetime.strptime('Wed, 27 Oct 1770 22:17:00 GMT', '%a, %d %b %Y %H:%M:%S %Z')
>>> y = datetime.datetime.strptime('Wed, 27 Oct 1770 22:17:00 PST', '%a, %d %b %Y %H:%M:%S %Z')
>>> y = datetime.datetime.strptime('Wed, 27 Oct 1770 22:17:00 EST', '%a, %d %b %Y %H:%M:%S %Z')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/brazil-pkg-cache/packages/Python/Python-2.5.1.17.1/RHEL5_64/DEV.STD.PTHREAD/build/lib/python2.5/_strptime.py", line 331, in strptime
    (data_string, format))
ValueError: time data did not match format:  data=Wed, 27 Oct 1770 22:17:00 EST  fmt=%a, %d %b %Y %H:%M:%S %Z

注意:对我来说,dateutil 不是一个选项,我想支持多种格式,不想让 dateutil 错误地解析日期。(比如,dateutil 似乎在看到像 01/02/2010、Feb 1 或 Jan 2 这样的日期时会猜测)。我基本上想尝试按照我指定的顺序接受格式,直到找到匹配的为止。

4 个回答

2

我觉得完全不使用字符串处理是做不到的,不过也许可以试试这个方法。看看时间,然后试试下面这个:

datetime(*(time.strptime('Wed, 27 Oct 1770 22:17:00 GMT', '%a, %d %b %Y %H:%M:%S %Z')[0:5]))
3

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这种情况可能是因为我们没有正确理解某些概念或者使用了不合适的代码。

比如,有些人可能会在代码中使用了一些复杂的函数或者语法,但其实这些东西并不是每个人都能轻易理解的。对于刚开始学习编程的小白来说,最重要的是先掌握基础,慢慢来,不要急于求成。

如果你在学习过程中遇到困难,可以尝试去查阅一些简单易懂的资料,或者向更有经验的人请教。记住,编程是一个不断学习和实践的过程,遇到问题是很正常的,不要气馁!

val = str.join(' ', 'Wed, 17 Oct 2011 22:22:22 +0300'.split(None)[1:7])

val = datetime.datetime.strptime(val, '%d %b %Y %H:%M:%S')
3

你有没有认真看看dateutil的文档?

dateutil.parser.parse()这个函数确实有一些参数,可以让你控制它在猜测日期格式时的优先级,而且还有一个ignoretz=True的参数。

如果这些还不够,你可能可以找到一个类来重写,以实现你自己的优先级规则。

当然,如果这些都不行,你可能就得用字符串解析的方法了,因为Python的strptime()实现会调用底层的C语言实现来处理时区名称。(我不知道为什么它对你来说不理解EST,但这可能是系统级别的问题,而不是某些系统上的问题)

撰写回答