example - datetime python 3
Formato Strptime de Python con bits opcionales. (4)
¿Qué hay de solo añadirlo si no existe?
if ''.'' not in date_string:
date_string = date_string + ''.0''
timestamp = datetime.strptime(date_string, ''%Y-%m-%d %H:%M:%S.%f'')
Ahora mismo tengo:
timestamp = datetime.strptime(date_string, ''%Y-%m-%d %H:%M:%S.%f'')
Esto funciona muy bien a menos que esté convirtiendo una cadena que no tenga los microsegundos. ¿Cómo puedo especificar que los microsegundos son opcionales (y deberían considerarse 0 si no están en la cadena)?
Podrías usar un bloque try/except
:
try:
timestamp = datetime.strptime(date_string, ''%Y-%m-%d %H:%M:%S.%f'')
except ValueError:
timestamp = datetime.strptime(date_string, ''%Y-%m-%d %H:%M:%S'')
Prefiero usar coincidencias de expresiones regulares en lugar de intentar y excepto. Esto permite muchos fallbacks de formatos aceptables.
# full timestamp with milliseconds
match = re.match(r"/d{4}-/d{2}-/d{2}T/d{2}:/d{2}:/d{2}/./d+Z", date_string)
if match:
return datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%S.%fZ")
# timestamp missing milliseconds
match = re.match(r"/d{4}-/d{2}-/d{2}T/d{2}:/d{2}:/d{2}Z", date_string)
if match:
return datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%SZ")
# timestamp missing milliseconds & seconds
match = re.match(r"/d{4}-/d{2}-/d{2}T/d{2}:/d{2}Z", date_string)
if match:
return datetime.strptime(date_string, "%Y-%m-%dT%H:%MZ")
# unknown timestamp format
return false
No olvide importar "re" así como "datetime" para este método.
datetime(*map(int, re.findall(''/d+'', date_string)))
puede analizar tanto ''%Y-%m-%d %H:%M:%S.%f''
como ''%Y-%m-%d %H:%M:%S''
. Es demasiado permisivo si su entrada no se filtra.
Es rápido y sucio, pero a veces el tiempo de strptime()
es demasiado lento. Se puede usar si sabe que la entrada tiene el formato de fecha esperado.