14

我有一个文本文件,其中包含许多 isoformat 的日期时间字符串。字符串与此类似:

'2009-02-10 16:06:52.598800'

这些字符串是使用生成的str(datetime_object)。问题是,由于某种原因,str(datetime_object)当 datetime 对象的微秒设置为零并且某些字符串看起来像这样时,会生成不同的格式:

'2009-02-10 16:06:52'

如何解析这些字符串并将它们转换为日期时间对象

获取对象中的所有数据非常重要,包括微秒。

注意:我必须使用Python 2.5,微秒格式指令%f在 2.5 中不存在。

4

4 回答 4

21

或者:

from datetime import datetime

def str2datetime(s):
    parts = s.split('.')
    dt = datetime.strptime(parts[0], "%Y-%m-%d %H:%M:%S")
    return dt.replace(microsecond=int(parts[1]))

使用strptime自身来解析日期/时间字符串(因此无需考虑正则表达式的极端情况)。

于 2009-02-10T06:16:21.457 回答
11

使用 dateutil 模块。它支持比 Python 内置的更广泛的日期和时间格式。

您需要easy_install dateutil才能使以下代码正常工作:

from dateutil.parser import parser

p = parser()
datetime_with_microseconds = p.parse('2009-02-10 16:06:52.598800')
print datetime_with_microseconds.microsecond

结果是:

598799
于 2009-02-10T06:23:30.283 回答
5

有人已经为此问题提交了一个错误:Issue 1982。由于您需要它与 python 2.5 一起使用,您必须手动解析值,然后操作 datetime 对象。

于 2009-02-10T06:07:10.697 回答
2

这可能不是最好的解决方案,但您可以使用正则表达式:

m = re.match(r'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d{6}))?', datestr)
dt = datetime.datetime(*[int(x) for x in m.groups() if x])
于 2009-02-10T06:14:45.767 回答