Převod řetězce na datum

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í.

Řeš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:

Poznámky:

  • strptime = "čas parsování řetězce"
  • strftime = "čas formátování řetězce"
  • Vyslovte to nahlas ještě dnes a za půl roku to už nebudete muset hledat.
Komentáře (14)

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
Komentáře (8)

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)
Komentáře (6)