Tekenreeks omzetten in datetime

Ik heb een enorme lijst met datums als deze:

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

Ik zal deze terug moeten zetten in echte datetime velden in een database, dus ik moet ze omtoveren in echte datetime objecten.

Dit gaat via Django's ORM dus ik kan'geen SQL gebruiken om de conversie te doen bij het invoegen.

Oplossing

datetime.strptime is de hoofdroutine voor het omzetten van strings in datetimes. Het kan allerlei formaten verwerken, waarbij het formaat wordt bepaald door een format string die je het geeft:

from datetime import datetime

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

Het resulterende datetime object is tijdzone-naief.

Links:

Opmerkingen:

  • strptime = "string parse time"
  • strftime = "string format time"
  • Spreek het vandaag hardop uit & over 6 maanden hoef je er niet meer naar te zoeken.
Commentaren (14)

Gebruik de dateutil bibliotheek van derden:

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

Deze kan met de meeste datumformaten overweg, inclusief het formaat dat je moet ontleden. Het is handiger dan strptime, omdat het meestal het juiste formaat kan raden.

Het is erg handig voor het schrijven van tests, waar leesbaarheid belangrijker is dan prestaties.

Je kunt het installeren met:

pip install python-dateutil
Commentaren (8)

Kijk eens naar strptime in de time module. Het is de inverse van 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)
Commentaren (6)