fecha y hora de la cadena en Python, formato de cadena que mejor adivina

La función para obtener un datetime de una cadena, datetime.strptime(date_string, format) requiere un formato de cadena como segundo argumento. ¿Hay alguna forma de crear una fecha y hora a partir de una cadena sin conocer el formato exacto y sin que Python lo adivine?

Usa la biblioteca de dateutil .

Ya estaba usando dateutil como una biblioteca indispensable para manejar zonas horarias
(Consulte Convertir la cadena de fecha y hora UTC a fecha y hora local y ¿Cómo convierto la hora local a UTC en Python? )

Y me acabo de dar cuenta de que tiene soporte para el análisis de fechas:

 import dateutil.parser yourdate = dateutil.parser.parse(datestring) 

(Consulte también ¿Cómo traduzco una cadena datetime ISO 8601 en un objeto datetime Python? )

Puede salirse con una función simple si solo se compara con las fechas.

 def get_date(s_date): date_patterns = ["%d-%m-%Y", "%Y-%m-%d"] for pattern in date_patterns: try: return datetime.datetime.strptime(s_date, pattern).date() except: pass print "Date is not in expected format: %s" %(s_date) sys.exit(0) 

Antes de ser un chico python, era un chico perl. Una de las cosas que siempre me he perdido pero que no he visto nada cerca es Date :: Manip . Ese módulo puede extraer una buena marca de tiempo de un puñado de mordiscos. Casi sospecho que su autor llegó a un acuerdo con el diablo.

He encontrado algunas cosas que lo apuñala en Python:

  • fecha normal
  • mxDateTime
  • El módulo de fechas de Roundup tiene algunos fans.

Sin embargo, si encuentras algo mejor, me encantaría saberlo.

Puede usar el indicador de fecha, detectará todos los tipos de estilo natural de fechas.

import datefinder # Módulo usado para encontrar diferentes estilos de fecha con hora

 string_value = " created 01/15/2005 by ACME inc.and associates.January 4th,2017 at 8pm" matches = datefinder.find_dates(string_value) for match in matches: print("match found ",match) 

Salida

 match found 2005-01-15 00:00:00 match found 2017-01-04 20:00:00