2011-03-22 77 views
3

我有一个日志文件的时间戳与类似的格式:时间戳包括微秒的Python读物日志文件

2010-01-01 18:48:14.631829 

我已经试过了秋后算账一样strptime,不管我做什么,我会发现它与我指定的格式不符。 ("%Y-%m-%d %H:%M:%S" OR "%Y-%m-%d %H:%M:%S.%f")

我甚至试着用“。”分隔值。所以我只能比较它没有微秒的值,但它仍然告诉我它不匹配:“%Y-%m-%d%H:%M:%S”

Ug,我需要做的只是一个简单的时间三角洲,哈哈。为什么python的时间这么分散? TIME,DATETIME等各种进口

回答

4

可以(只的Python 2.6+)使用strptime像这样:

>>> import datetime 
>>> s = "2010-01-01 18:48:14.631829" 
>>> datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S.%f") 
datetime.datetime(2010, 1, 1, 18, 48, 14, 631829) 

文档:http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior

...

%f Microsecond as a decimal number [0,999999], zero-padded on the left

...

如果在2.5 你不关心的万分之一,你可以砍掉它:

>>> import re 
>>> datetime.datetime.strptime(re.sub('\..*', '', s), "%Y-%m-%d %H:%M:%S") 
datetime.datetime(2010, 1, 1, 18, 48, 14) 
+1

%f是一个糟糕的指令。我假设这是因为我在Python 2.5? – captrap 2011-03-22 00:24:21

+1

啊,是的,我得到'ValueError:'f'在Python 2.5中是格式为'%Y-%m-%d%H:%M:%S.%f'的格式不正确的指令 - 从未被注意到。 – miku 2011-03-22 00:26:17

+1

你需要Python 2.6 – 2011-03-22 00:26:43

0

当然,分割字符串确实工作:

>>> print s 
2010-01-01 18:48:14.631829 
>>> time.strptime(s.split('.')[0], "%Y-%m-%d %H:%M:%S") 
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=18, tm_min=48, tm_sec=14, tm_wday=4, tm_yday=1, tm_isdst=-1) 
>>> 
0

我下面的作品(Python 2.6中):

>>> import datetime 
>>> string1 = '2010-01-01 18:48:14.631829' 
>>> string2 = '2010-01-09 13:04:39.540268' 
>>> time1 = datetime.datetime.strptime(string1, '%Y-%m-%d %H:%M:%S.%f') 
>>> time2 = datetime.datetime.strptime(string2, '%Y-%m-%d %H:%M:%S.%f') 
>>> time2 - time1 
datetime.timedelta(7, 65784, 908439) 

即在这两个日期之间有7天,65784秒和908439微秒。有关timedelta对象的信息,请参阅datetime docs

编辑:请尝试以下,如果你不能使用%f指令:

>>> time1 = datetime.datetime.strptime(string1.split('.')[0], '%Y-%m-%d %H:%M:%S') 
>>> time2 = datetime.datetime.strptime(string2.split('.')[0], '%Y-%m-%d %H:%M:%S') 
>>> time2 - time1 
datetime.timedelta(7, 65785)