Skip to main content
 首页 » 编程设计

Python strptime 或用于复杂日期字符串解析的替代方法

2025年05月04日23sxdcgaq8080

我收到了大量需要读入数据库的日期时间表示形式。我正在使用 Python(因为它很棒)。这些字符串的格式很糟糕,不精确到秒,没有规定时区,小时也没有前导 0。所以它们看起来更像这样:

April 29, 2013, 7:52 p.m. 
April 30, 2013, 4 p.m. 

您会注意到,如果在 4:00 到 4:01 之间发生某些事情,它也会降低分钟数(呃)。无论如何,尝试用 time.strptime 解析这些,但是 the docs声明小时数必须是十进制数 [01:12](或 [01:24])。由于没有用 0 填充任何内容,我想知道是否还有其他东西可以传递给 strptime 以接受不带前导 0 的小时数;或者如果我应该尝试拆分,然后填充字符串;或使用其他构造日期时间对象的方法。

此外,strptime 似乎不接受 AM/PM 作为“A.M.”或“P.M.”,所以我也必须更正它。 . .

请注意,我无法批量处理这些字符串。我从一个外国应用程序一次一个地收到它们,该应用程序有时使用格式良好的 Unix 纪元时间戳,但偶尔会使用这种格式。即时处理它们是唯一的选择。

我正在使用导入了一些 Python 3 功能的 Python 2.7。

from __future__ import (print_function, unicode_literals) 

请您参考如下方法:

最灵活的解析器是 dateutil 的一部分包裹;它吃掉你的输入作为早餐:

>>> from dateutil import parser 
>>> parser.parse('April 29, 2013, 7:52 p.m.') 
datetime.datetime(2013, 4, 29, 19, 52) 
>>> parser.parse('April 30, 2013, 4 p.m.') 
datetime.datetime(2013, 4, 30, 16, 0)