2010-03-04 707 views
15

我有YYYYMMDD格式的日期和HHMMSS格式在第4弦和第5元素列表的時間。 IE:轉換日期/時間YYYYMMDD/HHMMSS格式到Python的datetime

data[4] = '20100304' 
data[5] = '082835' 

我創建日期時間的情況下(在一個名爲磁場產生)是這樣的:

generatedtime = datetime.datetime(int(data[4][:4]),int(data[4][4:6]),int(data[4][6:]),int(data[5][:2]),int(data[5][2:4]),int(data[5][4:6])) 

鑑於輸入格式無法改變,是有一個更清潔的方式我應該創建我的日期時間對象的實例?

+1

你的代碼雖然看起來很尷尬,但很好地完成了這項工作。 – 2010-03-04 14:39:21

回答

35

無需導入time; datetime.datetime.strptime可以自己做。

import datetime 
dt=datetime.datetime.strptime(data[4]+data[5],'%Y%m%d%H%M%S') 
print(dt) 
# 2010-03-04 08:28:35 

有關格式代碼(例如%Y%m%d%H%M%S)獲得的信息,請參見對docsstrftime

+1

如果未指定時間戳,則時間將被視爲本地時間。以下示例將UTC時間轉換爲Unix時間戳:'datetime.datetime.strptime(timeval,「%Y%m%d%H%M%S」)。replace(tzinfo = datetime.timezone.utc).timestamp() '(我實際上使用它來解析FTP MDTM響應) – Lekensteyn 2013-06-24 21:52:32

4

你可以看看time.strptime

import time 
time.strptime('20100304 082835', '%Y%m%d %H%M%S') 

以上假設爲24小時制(%H)。如果使用12小時制時鐘,則使用%I

有關可用格式指令的完整列表,請查看文檔的time.strftime

0
import time, datetime 

x = time.strptime("30 Nov 00", "%d %b %y") 
datetime.datetime(x) 

您也可以提供自己的日期字符串的格式,這裏是doc

0

你可以清理你的現有代碼發電機的位(相當於一個地圖):

generatedtime = datetime.datetime(*(int(x) for x in 
    (data[4][:4], data[4][4:6], data[4][6:], data[5][:2], data[5][2:4],data[5][4:6]) 
    )) 

甚至,如果你是在裝瘋賣傻,你可以把日期時間發言更清潔(代價是增加了一條荒謬的線):

slices = ((4, slice(4)), (4, slice(4,6)), (4, slice(6,None)), (5, slice(2)), (5, slice(2,4)), (5, slice(4,6))) 
generatedtime = datetime.datetime(*(int(data[i][s]) for (i,s) in slices))