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

epi*_*fil 1 python datetime parsing python-2.7

我收到了一个需要读入数据库的大量日期时间表示.我正在使用Python(因为它摇滚).字符串是一种可怕的,可怕的格式,它们不精确到秒,没有说明时区,并且小时没有前导0.因此它们看起来更像是这样的:

April 29, 2013, 7:52 p.m.
April 30, 2013, 4 p.m.
Run Code Online (Sandbox Code Playgroud)

你会注意到,如果在凌晨4点到4点01分之间发生了什么事,那么它也会缩短分数(呃).无论如何,试图用time.strptime解析这些,但是文档说小时必须是十进制数[01:12](或[01:24]).因为0没有填充,我想知道是否还有其他东西我可以传递给strptime接受小时而不领先0; 或者我应该尝试分裂,然后填充字符串; 或使用一些其他构造日期时间对象的方法.

此外,它看起来不像strptime接受AM/PM为"AM"或"PM",所以我也必须纠正它...

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

我正在使用Python 2.7导入一些Python 3功能.

from __future__ import (print_function, unicode_literals)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 15

最灵活的解析器是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)
Run Code Online (Sandbox Code Playgroud)