Conversão de cadeia em data/hora

I'tenho uma lista enorme de datas-tempo como esta como cordas:

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

I'vou empurrá-los de volta para campos de data apropriados em uma base de dados, então preciso fazer mágica com eles em objetos de data reais.

Isto está passando por Django's ORM para que eu possa't usar SQL para fazer a conversão no insert.

Solução

O datetime.strptime é a rotina principal para analisar as cadeias de caracteres em datas e horários. Ele pode lidar com todos os tipos de formatos, com o formato determinado por uma string de formato que você lhe dá:

from datetime import datetime

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

O objeto datetime resultante é o timezone-naive.

Ligações:

Notas:

  • strptime = "string parse time"
  • strftime = "string format time"
  • Pronuncie em voz alta hoje e não terá que procurá-lo novamente em 6 meses.
Comentários (14)

Use a biblioteca dateutil de terceiros:

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

Ele pode lidar com a maioria dos formatos de datas, incluindo aquele que você precisa analisar. É mais conveniente do que o strptime, pois pode adivinhar o formato correto na maior parte do tempo.

É muito útil para testes de escrita, onde a legibilidade é mais importante do que o desempenho.

Você pode instalá-lo com:

pip install python-dateutil
Comentários (8)

Confira strptime no módulo time. É o inverso de 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)
Comentários (6)