¿Convertir cadenas de “formato desconocido” a objetos de fecha y hora?

Esta es probablemente una pregunta muy básica, pero después de leer la documentación todavía no puedo encontrar la manera de hacerlo …

Tengo dos cadenas en Python que contienen fechas de formato desconocido . No sé en qué formatos están, excepto que sé que ambos son expresiones válidas de fecha y hora. Por ejemplo, uno de ellos puede estar en el formato ISO y el otro en algún otro formato.

Todo lo que necesito es poder comparar las fechas. ¿Cuál es la forma correcta de convertir cadenas en objetos de fecha y hora apropiados para que puedan compararse?

¡Gracias!

El módulo dateutil tiene un analizador de fecha que puede analizar cadenas de fecha en muchos formatos.

Por ejemplo,

In [13]: import dateutil.parser as parser In [14]: parser.parse("19970902T090000") Out[14]: datetime.datetime(1997, 9, 2, 9, 0) In [15]: import datetime as dt In [16]: now = dt.datetime.now() In [17]: now.isoformat() Out[18]: '2012-11-06T15:08:51.393631' In [19]: parser.parse('2012-11-06T15:08:51.393631') Out[19]: datetime.datetime(2012, 11, 6, 15, 8, 51, 393631) In [20]: parser.parse('November 6, 2012') Out[20]: datetime.datetime(2012, 11, 6, 0, 0) 

Tenga en cuenta que algunas cadenas de fecha y hora pueden ser ambiguas: 10-09-2003 podría significar el 9 de octubre o el 10 de septiembre, por ejemplo. dateutil tiene parámetros como dayfirst y yearfirst para manejar esto:

 In [21]: parser.parse("10-09-2003") Out[21]: datetime.datetime(2003, 10, 9, 0, 0) In [22]: parser.parse("10-09-2003", dayfirst = True) Out[22]: datetime.datetime(2003, 9, 10, 0, 0) In [23]: parser.parse("10-09-03", yearfirst = True) Out[23]: datetime.datetime(2010, 9, 3, 0, 0)