Mám obrovský seznam takových dat jako řetězce:
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
Chystám se je vložit zpět do správných datových polí v databázi, takže je potřebuji vykouzlit do skutečných datových objektů.
Prochází to přes Django's ORM, takže nemohu použít SQL pro konverzi při vložení.
datetime.strptime
je hlavní rutina pro parsování řetězců na časy. Umí zpracovávat nejrůznější formáty, přičemž formát je určen formátovacím řetězcem, který jí zadáte:
from datetime import datetime
datetime_object = datetime.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
Výsledný objekt datetime
je nezávislý na časovém pásmu.
Odkazy:
Dokumentace jazyka Python pro řetězce formátu strptime
/strftime
: Python 2, Python 3.
strftime.org je také opravdu pěkná reference pro strftime.
Poznámky:
strptime
= "čas parsování řetězce"strftime
= "čas formátování řetězce"Použijte knihovnu třetí strany dateutil:
from dateutil import parser
parser.parse("Aug 28 1999 12:00AM") # datetime.datetime(1999, 8, 28, 0, 0)
Zvládne většinu formátů dat, včetně toho, který potřebujete analyzovat. Je pohodlnější než strptime
, protože většinou dokáže odhadnout správný formát.
Je velmi užitečný při psaní testů, kde je čitelnost důležitější než výkon.
Můžete jej nainstalovat pomocí:
pip install python-dateutil
Podívejte se na strptime v modulu time. Je to inverzní modul k 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)