Python dateutil.parser.parse analiza el mes primero, no el día
import dateutil (2)
Especifique dayfirst=True
:
>>> dateutil.parser.parse("05.01.2015", dayfirst=True)
datetime.datetime(2015, 1, 5, 0, 0)
Esto da prioridad al formato DD-MM-YYYY en lugar de MM-DD-YYYY en los casos en que el formato de la fecha es ambiguo (por ejemplo, cuando el día es 12 o menos). La función está documentada here .
Estoy usando dateutil.parser.parse
para formatear una fecha a partir de una cadena. Pero ahora se mezcla el mes y el día.
Tengo una cadena que contiene 05.01.2015
. Después
dateutil.parser.parse("05.01.2015")
vuelve:
datetime.datetime(2015, 5, 1, 0, 0)
Esperaba que volviera (2015, 1, 5, 0, 0)
¿Cómo puedo decirle al código que el formato es dd.mm.yyyy
?
Para el registro, 25.01.2015
se analizará como (2015, 1, 25, 0, 0)
, como se esperaba.
Preguntó: ''¿Cómo puedo saber el código que el formato es dd.mm.yyyy?''
Como ya has importado dateutil
, la respuesta más directa puede ser especificar el formato de la cadena de fecha, pero este es un código bastante feo:
>>> dateutil.parser.datetime.datetime.strptime(date_string, ''%d.%m.%Y'')
datetime.datetime(2015, 1, 5, 0, 0)
Podemos ver una alternativa obvia incrustada en el código. Podrías usar eso directamente.
>>> from datetime import datetime
>>> datetime.strptime(date_string, ''%d.%m.%Y'')
datetime.datetime(2015, 1, 5, 0, 0)
También hay algunas bibliotecas alternativas más nuevas que ofrecen métodos y propiedades en abundancia.
Más simple de usar en este caso sería la arrow
:
>>> import arrow
>>> arrow.get(date_string, ''DD.MM.YYYY'')
<Arrow [2015-01-05T00:00:00+00:00]>
Aunque me parece que el formato para la arrow más fácil de recordar, el pendulum utiliza el antiguo sistema de formato de Python, lo que podría evitarle tener que aprender a utilizar las flechas.
>>> import pendulum
>>> pendulum.datetime.strptime(date_string, ''%d.%m.%Y'')
<Pendulum [2015-01-05T00:00:00+00:00]>