用微秒解析日期时间字符串

时间:2009-02-10 05:35:09

标签: python datetime parsing

我在isoformat中有一个包含很多日期时间字符串的文本文件。字符串类似于:

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

这些字符串是使用str(datetime_object)生成的。问题是,由于某种原因,当{date}对象的微秒设置为零并且某些字符串如下所示时,str(datetime_object)会生成不同的格式:

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

如何解析这些字符串并将其转换为datetime object

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

我必须使用 Python 2.5 ,我发现2.5中不存在微秒的格式指令%f

4 个答案:

答案 0 :(得分: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本身来解析日期/时间字符串(因此无需考虑正则表达式的极端情况)。

答案 1 :(得分:10)

使用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

答案 2 :(得分:5)

有人已就此问题提出错误:Issue 1982。由于你需要使用python 2.5,你必须手动解析值,然后操纵datetime对象。

答案 3 :(得分: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])