Python date string to date object


345

¿Cómo convierto una cadena en un objeto de fecha en Python?

La cadena sería: "24052010"(correspondiente al formato: "%d%m%Y")

No quiero un objeto datetime.datetime, sino un datetime.date.

Respuestas:


586

Puede usar strptimeen el datetimepaquete de Python:

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)

Estoy intentando un proceso similar, excepto que mi cadena de entrada no tiene el año, por lo que parece '2405'. Por defecto, el año se toma como 1900. El problema ocurre al analizar la fecha de febrero como '2902'. Me sale este error ValueError: day is out of range for month. No estoy seguro de cómo puedo configurar el año predeterminado al analizar.
Shubham Naik

85
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()

59

Pregunta directamente relacionada:

¿Qué pasa si tienes

datetime.datetime.strptime("2015-02-24T13:00:00-08:00", "%Y-%B-%dT%H:%M:%S-%H:%M").date()

y obtienes:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/_strptime.py", line 308, in _strptime
    format_regex = _TimeRE_cache.compile(format)
  File "/usr/local/lib/python2.7/_strptime.py", line 265, in compile
    return re_compile(self.pattern(format), IGNORECASE)
  File "/usr/local/lib/python2.7/re.py", line 194, in compile
    return _compile(pattern, flags)
  File "/usr/local/lib/python2.7/re.py", line 251, in _compile
    raise error, v # invalid expression
sre_constants.error: redefinition of group name 'H' as group 7; was group 4

e intentaste:

<-24T13:00:00-08:00", "%Y-%B-%dT%HH:%MM:%SS-%HH:%MM").date()

pero aún obtienes el rastreo anterior.

Responder:

>>> from dateutil.parser import parse
>>> from datetime import datetime
>>> parse("2015-02-24T13:00:00-08:00")
datetime.datetime(2015, 2, 24, 13, 0, tzinfo=tzoffset(None, -28800))

1
2015-07-20 09: 46: 55 + 00: 00 tengo este tipo de datos, ¿cómo obtengo el objeto de fecha?
Hardik Gajjar

Use el módulo re (expresión regular) para cambiar sus datos de "2015-07-20 09: 46: 55 + 00: 00" a "2015-07-20T09: 46: 55-00: 00". Luego use dateutil.parse para obtener un objeto de fecha.
Schopenhauer

1
Gracias, en realidad el problema era el tipo de objeto dict y acabo de obtener una solución usando dict.get usando
Hardik Gajjar

2
Otra idea es leer el manual docs.python.org/3/library/… y notar que% B significa "Mes como nombre completo de la localidad". que es como "enero" o "diciembre", por lo que "02" no se analizará.
Voltear

1
La cadena de formato de fecha en esto es incorrecta, debería ser un% m no un% B
anunciador

24

Si eres perezoso y no quieres pelear con literales de cadena, puedes ir con el parsermódulo.

from dateutil import parser
dt = parser.parse("Jun 1 2005  1:33PM")
print(dt.year, dt.month, dt.day,dt.hour, dt.minute, dt.second)
>2005 6 1 13 33 0

Solo una nota al margen , ya que estamos tratando de hacer coincidir la anyrepresentación de cadena, es 10 veces más lenta questrptime


Muy simple solución, gracias. Estaba tratando de convertir una fecha larga de Excel que se mostraba comoMonday, June 03, 2019
Jeff Bluemel

5

tiene una cadena de fecha como esta, "24052010" y desea un objeto de fecha para esto,

from datetime import datetime
cus_date = datetime.strptime("24052010", "%d%m%Y").date()

este cus_date le dará un objeto de fecha.

puedes recuperar la cadena de fecha de tu objeto de fecha usando esto,

cus_date.strftime("%d%m%Y")

3

Hay otra biblioteca llamada arrowrealmente genial para hacer manipulación en la fecha de Python.

import arrow
import datetime

a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True

1

Use el módulo de tiempo para convertir datos.

Fragmento de código:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.