2009-02-10 82 views
14

我有一个文本文件,在isoformat中有很多日期时间字符串。字符串是类似于:解析日期时间字符串,微秒

'2009-02-10 16:06:52.598800' 使用str(datetime_object)产生

这些字符串。问题是,由于某种原因,str(datetime_object)生成时的日期时间对象微秒设置为零不同的格式和一些字符串看起来像这样:

“2009-02-10 16点06分52秒”

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

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

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

回答

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本身解析日期/时间字符串(所以没必要想出一个正则表达式的角落案例)。

+0

感谢这个答案!我建议将最后一行更改为: return dt.replace(microsecond = int(1000 * float('0.'+ parts [1]))) 这会正确处理所有情况, '2017-03-16 21:20:57.31' 应该给310us而不是31us。 – denizb 2017-03-17 14:54:25

5

有人已经提出了这个问题的错误:Issue 1982。既然你需要这个来使用python 2.5,你必须解析manualy的值,然后操作datetime对象。

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]) 
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 
+0

+1 dateutil一路 – Yarin 2012-03-01 18:46:02