2010-03-04 11 views
15

Ich habe ein Datum im Format YYYYMMDD und eine Uhrzeit im HHMMSS-Format als Strings im 4. und 5. Element in einer Liste. IE:Konvertieren von Datum/Uhrzeit im YYYYMMDD/HHMMSS-Format in Python-Datetime

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

ich eine Instanz von Datetime erschaffe (in einem Feld einen Namen) wie folgt aus:

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])) 

Da das Eingabeformat nicht ändern kann, ist es ein sauberer Weg ich zu schaffen sein sollte meine Instanz des Datetime-Objekts?

+1

Ihr Code, während umständlich suchen, macht den Job gut. –

Antwort

35

Keine Notwendigkeit zu importieren time; datetime.datetime.strptime kann es selbst tun.

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

Informationen zu dem Formatcodes (zum Beispiel %Y%m%d%H%M%S) verfügbar ist, finden Sie in die docs für strftime.

+1

Wenn der Zeitstempel nicht angegeben ist, wird die Zeit als lokale Zeit behandelt. Das folgende Beispiel konvertiert eine UTC-Zeit in einen Unix-Zeitstempel: 'datetime.datetime.strptime (timeval,"% Y% m% d% H% M% S "). Replace (tzinfo = datetime.timezone.utc) .timestamp() '(Ich benutze das zum Parsen einer FTP-MDTM-Antwort) – Lekensteyn

4

Sie können einen Blick auf time.strptime werfen.

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

die oben geht von einer 24-Stunden-Uhr (%H). Verwenden Sie stattdessen %I, wenn Sie eine 12-Stunden-Uhr verwenden.

Eine vollständige Liste der verfügbaren Format Richtlinien für time.strftime die Dokumentation überprüfen

0
import time, datetime 

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

Sie auch Ihr eigenes Format von Datums-String zur Verfügung stellen kann, ist hier doc.

0

Sie reinigen könnte Ihre vorhandenen Code ein wenig mit einem Generator (entspricht einer Karte) nach oben:

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]) 
    )) 

oder sogar, wenn Sie wie ein Fuchs verrückt sind, könnten Sie die Datetime-Statement noch sauberer (auf Kosten eine lächerliche Linie hinzuzufügen):

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)) 
Verwandte Themen