Virknes pārvēršana datumpunktā

Man ir milzīgs saraksts ar šādiem datumiem un laikiem kā virknēm:

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

Es'grasos tos ievietot atpakaļ datubāzē atbilstošos datetime laukos, tāpēc man tie ir jāpārveido par reāliem datetime objektiem.

Tas notiek, izmantojot Django ORM, tāpēc es nevaru izmantot SQL, lai veiktu konversiju pēc ielikšanas.

Risinājums

datetime.strptime ir galvenā rutīna, kas ļauj analizēt virknes, pārveidojot tās datumā. Tā var apstrādāt visdažādākos formātus, un formātu nosaka pēc jūsu dotās formāta virknes:

from datetime import datetime

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

Rezultātā iegūtais datetime objekts nav atkarīgs no laika joslas.

Saites:

Piezīmes:

  • strptime = "string parse time"
  • strftime = "string format time"
  • Izrunājiet to skaļi jau šodien & amp; jums vairs nevajadzēs to meklēt pēc 6 mēnešiem.
Komentāri (14)

Izmantojiet trešās puses dateutil bibliotēku:

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

Tā var apstrādāt lielāko daļu datumu formātu, tostarp arī to, kas jums ir jāanalizē. Tā ir ērtāka par strptime, jo lielākoties spēj uzminēt pareizo formātu.

Tas ir ļoti noderīgs, rakstot testus, kur lasāmība ir svarīgāka par veiktspēju.

To var instalēt ar:

pip install python-dateutil
Komentāri (8)

Pārbaudiet strptime moduli time. Tas ir apgriezts 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āri (6)