example python datetime-format

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.