2011-03-22 80 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)