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.
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:
Dokumentacja Pythona dla łańcuchów formatu strptime
/strftime
: Python 2, Python 3.
strftime.org jest również naprawdę miłym odniesieniem dla strftime
Uwagi:
strptime
= "string parse time"strftime
= "string format time"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
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)