Mai mult
Conversia șir în datetime
Am'am o listă foarte mare de data-ori asta, ca siruri de caractere:
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
Am'm de gând să fie impingandu-le înapoi în buna datetime câmpuri într-o bază de date, așa că am nevoie să-magic-le în adevărate datetime obiecte.
Acest lucru se întâmplă prin Django's ORM deci nu pot't de a folosi SQL pentru a face conversia de pe inserare.
2022
19
datetime.strptime
este principalul rutină pentru parsarea siruri de caractere în datetimes. Se poate manipula tot felul de formate, cu formatul stabilit de către un șir format-ai dat-o:Rezultat "datetime" obiectul este în zona de fus orar-naiv.
Link-uri:
Python documentația pentru strptime`: Python 2, Python 3
Python documentația pentru strptime
/
strftime` format siruri de caractere: Python 2, Python 3strftime.org este, de asemenea, un foarte frumos de referință pentru strftime
Note:
strptime
= "string analiza timp"strftime
= "string format"Folosi terțe părți dateutil biblioteca:
Se poate ocupa de cele mai multe formate de dată, inclusiv cea de care ai nevoie pentru a analiza. L's mai convenabil decât
strptime
cum se poate ghici corect format de cele mai multe ori.L's foarte util pentru scrierea de teste, unde lizibilitatea este mai importantă decât performanța.
Îl puteți instala cu:
Check out strptime timp modulul. Este inversul strftime.
Am pus împreună un proiect care poate converti unele foarte elegant expresii. Check out timestring.
Aici sunt câteva exemple de mai jos:
pip instala timestring
Amintiți-vă acest lucru și nu te-ai't nevoie pentru a obține confuz în datetime de conversie din nou.
Șir la obiect datetime =
strptime
datetime obiect în alte formate =
strftime
Jun 1 2005 1:33PM
este egal cu
%b %d %F %I:%M%p
deci, ai nevoie strptime mi-e de conversie "string" a
Ieșire
Ce se întâmplă dacă ai avea alt format de date puteți folosi panda sau dateutil.analiza
Ieșire
Multe amprente de timp au un implicite de fus orar. Pentru a se asigura că codul va funcționa în fiecare fus orar, ar trebui să utilizați UTC intern și atașați un orar de fiecare dată când un obiect străin intră în sistem.
Python 3.2+:
În Python >= 3.7.0,
pentru a converti AAAA-LL-ZZ șir la obiect datetime,
datetime.fromisoformat
ar putea fi folosit.Aici sunt două soluții folosind Panda pentru a converti datele formatate ca siruri de caractere într-datetime.data obiecte.
Programarea
Și aici este cum de a converti OP's original data-timp exemple:
Există mai multe opțiuni pentru conversia de la siruri de caractere pentru a Panda Marcajele de timp folosind
to_datetime
, deci, a verifica documente dacă ai nevoie de ceva special.De asemenea, Marcajele de timp au multe proprietăți și metode, care pot fi accesate în plus față
.data
Ceva care nu e't menționat aici și este util: adăugarea unui sufix la zi. Am decuplat sufixul logică astfel încât să puteți folosi pentru orice număr doriți, nu doar datele.
Eu, personal, ca soluție, folosind
parser
modul, care este cel de-al doilea, Răspunsul la această întrebare este frumos, ca nu - 't au de a construi orice șir de caractere literale a obține de lucru. DAR, un dezavantaj este faptul că este 90% mai lent decât răspunsul acceptat cu strptime`.Atâta timp cât nu sunt a face acest lucru un milion de ori de peste si peste din nou, eu încă mai cred
parser
metodă este mult mai convenabil și se va ocupa de cele mai multe formate de timp în mod automat.Django fusul Orar conștienți obiect datetime exemplu.
Această conversie este foarte important pentru Django Python și când ai USE_TZ = True`:
A crea o mică funcție de utilitate, cum ar fi:
Acest lucru este destul de versatil:
săgeată oferă multe funcții utile pentru date și ore. Acest cod oferă un răspuns la întrebare și arată că săgeata este, de asemenea, capabil de formatare datele cu ușurință și afișarea de informații pentru alte locații.
Vezi http://arrow.readthedocs.io/en/latest/ pentru mai multe.
Ar fi util pentru conversia șir să datetime și, de asemenea, cu fusul orar
Puteți utiliza easy_date pentru a face mai ușor:
Dacă doriți doar formatul datei apoi, puteți converti manual prin trecerea câmpuri individuale, cum ar fi:
Puteți trece split șir de valori pentru a converti în data de tip, cum ar fi:
Veți obține valoarea rezultată în format dată.
se arată "Data de începere Data" Coloana și "Ultima Logare Timp" ambele sunt "obiect = siruri de caractere" în date-cadru
Prin utilizarea
parse_dates "opțiune în" read_csv
menționa puteți converti șirul datetime panda în format datetime.A se vedea mea answer.
În lumea reală, de date aceasta este o problemă reală: mai multe, nepotrivite, incomplete, inconsistente și mai multe limbi/regiune data formate, de multe ori amestecate în mod liber într-un singur set de date. L's nu este ok pentru producția de cod pentru a reuși, să nu mai vorbim excepție-fericit ca o vulpe.
Avem nevoie pentru a încerca...prinde mai multe datetime formate fmt1,fmt2,...,fmtn și de a suprima/ocupa excepții (de la
strptime()
) pentru toți cei care nepotrivire (și, în special, pentru a evita nevoie de un amărâte n-adânc crestate scara de try..catch clauze). De mea solution