Konwersja łańcucha na datę

I've got a huge list of date-times like this as strings:

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

Zamierzam umieścić je z powrotem w odpowiednich polach datetime w bazie danych, więc muszę je zmagnetyzować do prawdziwych obiektów datetime.

To przechodzi przez Django's ORM, więc nie mogę użyć SQL do konwersji przy wstawianiu.

Rozwiązanie

datetime.strptime` jest główną procedurą do przetwarzania łańcuchów znaków na daty. Może ona obsługiwać wszystkie rodzaje formatów, z formatem określonym przez łańcuch formatu, który jej podasz:

from datetime import datetime

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

Wynikowy obiekt datetime jest niezależny od strefy czasowej.

Linki:

Uwagi:

  • strptime = "string parse time"
  • strftime = "string format time"
  • Wymów to dziś na głos &nie będziesz musiał szukać tego ponownie za 6 miesięcy.
Komentarze (14)

Użyj biblioteki trzeciej strony dateutil:

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

Obsługuje ona większość formatów dat, włączając ten, który potrzebujesz parsować. Jest wygodniejsza niż strptime, ponieważ potrafi odgadnąć poprawny format przez większość czasu.

Jest to bardzo przydatne przy pisaniu testów, gdzie czytelność jest ważniejsza niż wydajność.

Możesz go zainstalować za pomocą:

pip install python-dateutil
Komentarze (8)

Sprawdź strptime w module time. Jest to odwrotność 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)
Komentarze (6)