2012-11-15 32 views
0

所以我想說,我不想用datetime.strptime()到前言本,我寫了一個非常簡單的解析器,代碼如下:Python的日期時間和處理微秒

def datetime_parse(s): 
    return datetime.datetime(int(s[0:4]), int(s[5:7]), int(s[8:10]), int(s[11:13]), 
          int(s[14:16]), int(s[17:19]), int(s[20:26])) 

的這裏的問題是,我微秒的轉換,我有值,如:

2012-09-30 17:00:04.01350000 

int()讀下來,會自動四捨五入爲0而據我所知datetime.datetime()只接受int秒。有沒有解決方法?

說明:在原來的問題,同時已被糾正,最後一個參數datetime.datetime()int(s[20:27])

+0

你能否闡述一下爲什麼你有你自己的解析器,而不是使用'datetime.strptime位()'? –

+0

我正在通過一個非常大的數據集來計算這個數據,並且以這種方式解析它顯着更快。 – ast4

回答

1

微秒應該在[0,1E6)的範圍內。您傳遞的是7位數字而不是6位,因此額外零位將實際值增加10倍。請改爲嘗試int(s[20:26])

+0

對不起,這是舊代碼的遺留物,已經調整過了。主要問題是試圖將其轉換。 – ast4

+0

讀取'[20:26]'並將其傳遞給一個int應自動轉換該值(向下舍入爲最接近的微秒)。還有別的你想做的事嗎? – jma127

+0

所以它的值如下:0.0,取整爲0,我寧願失去這種粒度。 – ast4

1

它按預期工作 - 一旦你解析回你得到相同的字符串中去串

>>> s = '2012-09-30 17:00:04.013500' 
>>> d = datetime.datetime(int(s[0:4]), int(s[5:7]), int(s[8:10]), int(s[11:13]), int(s[14:16]), int(s[17:19]), int(s[20:26])) 
>>> d.strftime('%Y-%m-%d %H:%M:%S.%f') 
'2012-09-30 17:00:04.013500'