Transformarea datelor dintr-un format în altul este un aspect fundamental în orice limbaj de programare. Majoritatea limbajelor permit conversii între tipurile de date predefinite.
Însă, tipurile de date personalizate, cum ar fi cele pentru dată și oră (datetime), necesită adesea module suplimentare pentru a fi convertite. Aceste module sunt esențiale, mai ales pentru conversiile date-oră, deoarece gestionarea acestora nu a fost niciodată simplă pentru programatori. Din fericire, Python include module preinstalate pentru a lucra cu datele și orele.
Vom explora modalitățile prin care putem transforma un șir de caractere ce reprezintă o dată și o oră într-un obiect datetime în Python, utilizând diferite module. Dar, înainte de a începe, este important să înțelegem de ce această conversie este necesară.
De ce este necesară conversia unui șir datetime într-un obiect datetime?
Atunci când lucrăm cu date, este dificil să le gestionăm dacă acestea sunt stocate ca șiruri de caractere. Transformarea lor în format datetime simplifică foarte mult manipularea lor. Datele stocate ca șiruri sunt tratate ca orice alt șir de caractere, fără a beneficia de metode speciale pentru lucrul cu date. Ele dispun doar de metodele generale pentru șiruri, care nu sunt utile când avem de-a face cu date propriu-zise.
De exemplu, dacă dorim să comparăm două date, acest lucru nu se poate realiza corect dacă acestea sunt stocate ca șiruri. Însă, dacă sunt transformate în format datetime, putem utiliza operatorii de comparație în același mod ca și pentru numere.
Acesta este doar un exemplu care demonstrează cum transformarea în format datetime facilitează lucrul cu date. Există multe alte scenarii, precum adăugarea sau scăderea zilelor, gestionarea fusurilor orare etc., unde conversia șirului date-oră într-un obiect date-oră simplifică semnificativ procesul de programare.
Acum că am înțeles importanța conversiei, să analizăm diferitele metode de transformare a unui șir datetime într-un obiect datetime. Vom folosi modulele datetime și dateutil, acesta din urmă fiind un modul extern. Să începem cu modulul datetime.
Utilizarea modulului datetime
Modulul datetime este un modul preinstalat în Python, conceput pentru a gestiona datele și orele. Acest modul conține numeroase clase care ne ajută să manipulăm datele și orele. Pentru conversia noastră, vom utiliza clasa `datetime.datetime`.
Clasa `datetime.datetime` are multiple metode, însă ne vom concentra pe metoda `strptime`, care este esențială pentru procesul nostru de conversie. Să vedem cum funcționează.
`datetime.strptime`
Metoda `datetime.strptime` este folosită pentru a converti un șir de caractere ce reprezintă o dată și o oră într-un obiect datetime. Aceasta primește două argumente: șirul date-oră în sine și formatul acelui șir. Rezultatul este un obiect datetime.
Iată un exemplu:
from datetime import datetime
string_datetime = "19-12-2022 09:37:56 PM"
format_datetime = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string_datetime, format_datetime))
Dacă executați codul de mai sus, veți obține următorul rezultat:
2022-12-19 21:37:56
Am preluat un șir datetime și l-am transformat într-un obiect datetime folosind `datetime.strptime`. Este esențial ca formatul specificat metodei să corespundă exact cu formatul șirului datetime. Dacă formatele nu se potrivesc, codul va genera o eroare sau va afișa un rezultat incorect.
Am folosit câteva coduri de formatare specifice pentru datetime. Puteți găsi o listă completă a acestora în documentația Python.
Metoda `datetime.strptime` returnează data și ora complete. Dacă avem nevoie doar de dată sau doar de oră, putem folosi metodele specifice ale obiectului datetime. Iată un exemplu:
from datetime import datetime
string_datetime = "19-12-2022 09:37:56 PM"
format_datetime = "%d-%m-%Y %I:%M:%S %p"
## obținerea datei separat
print("Data:", datetime.strptime(string_datetime, format_datetime).date())
## obținerea orei separat
print("Ora:", datetime.strptime(string_datetime, format_datetime).time())
Executând codul, obținem următoarele rezultate:
Data: 2022-12-19
Ora: 21:37:56
Metodele `date()` și `time()` returnează obiectele corespunzătoare datei și orei, care au și ele propriile lor metode.
Am observat că metoda `datetime.strptime` funcționează corect dacă șirul și formatul corespund. Dacă acestea nu se potrivesc, vom avea o eroare. Vom vedea cum putem gestiona aceste erori. Să rulăm următorul cod:
from datetime import datetime
string_datetime = "19:12:2022 09:37:56 PM"
format_datetime = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string_datetime, format_datetime))
Acest cod va genera o eroare, deoarece formatul nu se potrivește cu șirul. Pentru a gestiona aceste tipuri de erori, putem folosi blocul `try-except` din Python. Să-l adăugăm:
from datetime import datetime
try:
string_datetime = "19:12:2022 09:37:56 PM"
format_datetime = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string_datetime, format_datetime))
except ValueError as error:
print(error)
Dacă executăm din nou codul, vom primi următorul mesaj de eroare, fără ca programul să se oprească brusc:
time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'
Similar, putem folosi `try-except` și pentru metoda `parser.parse`, pe care o vom vedea în continuare. Acest lucru ne ajută să prevenim oprirea codului din cauza erorilor. Deși nu este legat direct de acest tutorial, este o practică bună de reținut.
Acestea fiind spuse, am încheiat discuția despre modulul datetime. Să trecem la modulul dateutil.
Utilizarea modulului dateutil
Modulul dateutil extinde funcționalitatea modulului datetime, făcând lucrul cu datele și orele mai ușor, oferind metode ușor de utilizat. Pentru a instala modulul, folosim următoarea comandă:
pip install python-dateutil
Metoda care ne interesează este `dateutil.parser.parse`. Să vedem cum putem converti un șir datetime într-un obiect datetime:
`parser.parse`
Metoda `parser.parse` primește un șir datetime și îl transformă automat într-un obiect datetime. Nu este necesar să specificăm formatul șirului. Aceasta identifică formatul și efectuează conversia automat. Iată un exemplu:
from dateutil import parser
string_datetime = "19-12-2022 09:37:56 PM"
print(parser.parse(string_datetime))
Executând codul de mai sus, vom obține următorul rezultat:
2022-12-19 21:37:56
Șirul datetime trebuie să respecte un anumit format pe care `parser.parse` îl poate interpreta. Dacă formatul nu este recunoscut, metoda va genera o eroare. Puteți verifica toate formatele de șiruri datetime pe care le acceptă pentru conversie automată în documentația modulului.
Deoarece metoda `parser.parse` returnează un obiect datetime, putem accesa separat data și ora, la fel cum am făcut și cu modulul datetime. Iată un exemplu:
from dateutil import parser
string_datetime = "19-12-2022 09:37:56 PM"
print("Data:", parser.parse(string_datetime).date())
print("Ora:", parser.parse(string_datetime).time())
Dacă executăm codul, obținem:
Data: 2022-12-19
Ora: 21:37:56
După cum se vede, dateutil simplifică mult lucrul cu datele și orele comparativ cu modulul datetime. Vă recomandăm să explorați documentația modulului pentru mai multe informații.
Concluzie
Am folosit un modul încorporat și un modul extern pentru a converti un șir datetime într-un obiect datetime. Există și alt modul preinstalat, numit `time`, care permite o conversie similară cu modulele datetime și dateutil. Vă încurajăm să-l încercați. Nu va fi dificil, deoarece ați lucrat deja cu module similare.
Pot exista și alte biblioteci care pot face același lucru. Modulele pe care le-am folosit în acest tutorial sunt standard și utilizate pe scară largă. Puteți explora și alte module pentru a alege varianta cea mai potrivită pentru nevoile dumneavoastră.
De asemenea, vă recomandăm să explorați și modul în care se poate calcula diferența de timp în Python.
Spor la programare! 🙂