2015-01-06 20 views
0

我寫了一個腳本來讀取類型爲'Tue Nov 18 19:23:17 2014'的ASCII格式的日期,並將其轉換爲繪圖的十進制日期。我的兩行代碼有效,但看起來很複雜。我無法直接找到一個庫函數來做這件事,我想我一定會錯過一些東西;應該有一種簡潔的方式來做到這一點。任何建議?簡明的ASCII日期到十進制日期

import time, datetime 
from matplotlib import dates 
b = time.strptime('Tue Nov 18 19:23:17 2014') 
d = dates.date2num(datetime.datetime(b[0],b[1],b[2],b[3],b[4],b[5])) 
print d 
#this code results in 735555.807836 

#Simplified code incorporating suggestion by Toni_W 
from matplotlib import dates 
from dateutil.parser import parse 
dates.date2num(parse('Tue Nov 18 19:23:17 2014')) 
+0

您可以使用一個公式直接從'time'去'float',但它肯定贏不要簡潔。 –

+0

你如何處理時區?或者你的輸入是否被認爲是UTC? – ghoti

+0

@Toni_W,謝謝:基本上我的代碼被簡化爲一行:dates.date2num(parse('Tue Nov 18 19:23:17 2014')) – gciriani

回答

1

這不是你需要的嗎?

Parsing datetime in Python..?

由於@TimPietzcker建議,在dateutil包是要走的路,它 正確和自動處理的前3種格式:

>>> from dateutil.parser import parse 
>>> parse("Fri Sep 25 18:09:49 -0500 2009") 
datetime.datetime(2009, 9, 25, 18, 9, 49, tzinfo=tzoffset(None, -18000)) 
>>> parse("2008-06-29T00:42:18.000Z") 
datetime.datetime(2008, 6, 29, 0, 42, 18, tzinfo=tzutc()) 
>>> parse("2011-07-16T21:46:39Z") 
datetime.datetime(2011, 7, 16, 21, 46, 39, tzinfo=tzutc()) 

似乎希克的unixtime格式但幸運的是標準 datetime.datetime是爲任務:

>>> from datetime import datetime 
>>> datetime.utcfromtimestamp(float("1294989360")) 
datetime.datetime(2011, 1, 14, 7, 16) 

這是相當容易使一個功能出了這是處理所有4 格式:

from dateutil.parser import parse 
from datetime import datetime 

def parse_time(s): 
    try: 
     ret = parse(s) 
    except ValueError: 
     ret = datetime.utcfromtimestamp(s) 
    return ret 
相關問題