Konvertering av streng til datetime

Jeg har en enorm liste med dato-tider som dette som strenger:

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

I'm kommer til å skyve disse tilbake i riktig datetime felt i en database, så jeg trenger å trylle dem inn i ekte datetime objekter.

Dette går gjennom Djangos ORM, så jeg kan ikke bruke SQL til å gjøre konverteringen ved innsetting.

Løsning

datetime.strptime` er hovedrutinen for å analysere strenger til datetider. Den kan håndtere alle slags formater, med formatet bestemt av en formatstreng du gir den:

from datetime import datetime

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

Det resulterende datetime-objektet er tidssone-naivt.

Koblinger:

Merknader:

  • strptime = "string parse time"
  • strftime = "string format time"
  • Si det høyt i dag, så slipper du å søke etter det igjen om 6 måneder.
Kommentarer (14)

Bruk tredjepartsbiblioteket dateutil:

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

Det kan håndtere de fleste datoformater, inkludert det du trenger å analysere. Det er mer praktisk enn strptime ettersom det kan gjette riktig format mesteparten av tiden.

Det er veldig nyttig for å skrive tester, der lesbarhet er viktigere enn ytelse.

Du kan installere det med:

pip install python-dateutil
Kommentarer (8)

Sjekk ut strptime i modulen time. Det er det inverse av 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)
Kommentarer (6)