2010-03-04 38 views
15

Tengo una fecha en formato YYYYMMDD y una hora en formato HHMMSS como cadenas en los elementos 4º y 5º de una lista. IE:Conversión de fecha/hora en formato YYYYMMDD/HHMMSS a Python datetime

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

Estoy creando una instancia de fecha y hora (en un campo denominado genera) de esta manera:

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

Teniendo en cuenta que el formato de entrada no puede cambiar, hay una manera más limpia que debería ser la creación de mi instancia del objeto datetime?

+1

Su código, aunque incómodo, hace el trabajo muy bien. –

Respuesta

35

No es necesario importar time; datetime.datetime.strptime puede hacerlo 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 

Para obtener información sobre los códigos de formato (por ejemplo %Y%m%d%H%M%S) disponibles, para ver el docsstrftime.

+1

Si no se especifica la marca de tiempo, la hora se tratará como hora local. El siguiente ejemplo convierte una hora UTC en la marca de tiempo de Unix: 'datetime.datetime.strptime (timeval,"% Y% m% d% H% M% S "). Replace (tzinfo = datetime.timezone.utc) .timestamp() '(De hecho, uso esto para analizar una respuesta FTP MDTM) – Lekensteyn

4

Puede consultar time.strptime.

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

El anterior supone un reloj de 24 horas (%H). Use %I en su lugar si usa un reloj de 12 horas.

Para obtener una lista completa de las directivas de formato disponibles, mira a los documentos de time.strftime

0
import time, datetime 

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

También puede proporcionar su propio formato de cadena de fecha, aquí es doc.

0

Se puede limpiar su código existente un poco con un generador (equivalente a un mapa):

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 incluso, si es que estás loco como un zorro, que podría hacer la declaración de fecha y hora aún más limpio (a expensas de agregar una línea ridícula):

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)) 
Cuestiones relacionadas