2010-03-04 8 views
15

Ho una data nel formato AAAAMMGG e un'ora in formato HHMMSS come stringhe nel 4 ° e 5 ° elemento in un elenco. IE:Conversione di data/ora nel formato AAAAMMGG/HHMMSS in Python datetime

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

sto creando un'istanza di datetime (in un campo denominato genera) come questo:

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

Dato che il formato di input non può cambiare, c'è un modo più pulito dovrei essere la creazione di la mia istanza dell'oggetto datetime?

+1

Il tuo codice, anche se goffo, fa bene il lavoro. –

risposta

35

Non è necessario importare time; datetime.datetime.strptime può farlo da solo.

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

Per informazioni sui codici di formato (ad esempio %Y%m%d%H%M%S), vedere la docs per strftime.

+1

Se il timestamp non è specificato, l'ora verrà trattata come ora locale. L'esempio seguente converte un orario UTC in timestamp Unix: 'datetime.datetime.strptime (timeval,"% Y% m% d% H% M% S ") sostituisci (tzinfo = datetime.timezone.utc) .timestamp() '(In realtà lo uso per analizzare una risposta FTP MDTM) – Lekensteyn

4

Si potrebbe dare un'occhiata a time.strptime.

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

che questo assume un orologio di 24 ore (%H). Utilizzare invece %I se si utilizza un orologio a 12 ore.

Per un elenco completo delle direttive formato disponibili, controlla la documentazione per time.strftime

0
import time, datetime 

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

È inoltre possibile fornire il proprio formato di stringa di data, qui è doc.

0

Si potrebbe ripulire il codice esistente un po 'con un generatore (equivalente a una mappa):

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

o anche, se sei pazzo come una volpe, si potrebbe fare la dichiarazione datetime ancora più pulito (a spese dell'aggiunta di una linea ridicola):

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)) 
Problemi correlati