Conversión de una cadena en una fecha

Tengo una lista enorme de fechas como cadenas:

Jun 1 2005  1:33PM
Aug 28 1999 12:00AM

Voy a meterlas en campos de fecha y hora en una base de datos, así que necesito convertirlas en objetos de fecha y hora reales.

Esto va a través de Django's ORM así que no puedo usar SQL para hacer la conversión en la inserción.

Solución

datetime.strptime es la rutina principal para convertir cadenas en fechas. Puede manejar todo tipo de formatos, con el formato determinado por una cadena de formato que le das:

from datetime import datetime

datetime_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

El objeto datetime resultante es independiente de la zona horaria.

Enlaces:

  • Documentación de Python para strptime: Python 2, Python 3

  • Documentación de Python para el formato de cadenas strptime/strftime: Python 2, Python 3

  • Strftime.org]5 es también una buena referencia para strftime

Notas:

  • strptime = "tiempo de parseo de la cadena"
  • strftime = "tiempo de formato de cadena"
  • Pronúncialo en voz alta hoy y no tendrás que volver a buscarlo en 6 meses.
Comentarios (14)

Utilice la biblioteca de terceros dateutil:

from dateutil import parser
parser.parse("Aug 28 1999 12:00AM")  # datetime.datetime(1999, 8, 28, 0, 0)

Puede manejar la mayoría de los formatos de fecha, incluyendo el que necesitas analizar. Es más conveniente que strptime ya que puede adivinar el formato correcto la mayoría de las veces.

Es muy útil para escribir pruebas, donde la legibilidad es más importante que el rendimiento.

Puedes instalarlo con:

pip install python-dateutil
Comentarios (8)

Comprueba strptime en el módulo time. Es la inversa de strftime.

$ python
>>> import time
>>> time.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
time.struct_time(tm_year=2005, tm_mon=6, tm_mday=1,
                 tm_hour=13, tm_min=33, tm_sec=0,
                 tm_wday=2, tm_yday=152, tm_isdst=-1)
Comentarios (6)