Pretvaranje jednog tipa podataka u drugi ključna je operacija u programiranju. Gotovo svi programski jezici nude podršku za konverziju ugrađenih tipova podataka.
Međutim, kod prilagođenih tipova podataka, poput datuma i vremena, potrebni su dodatni moduli za konverziju. Ovi moduli su posebno važni za datume i vremena, jer programerima nikada nije bilo jednostavno raditi s njima. Srećom, Python ima ugrađene module koji olakšavaju rad s datumima i vremenom.
U nastavku ćemo naučiti kako pretvoriti niz (string) datuma i vremena u objekt datuma i vremena u Pythonu, koristeći različite module. No, pre nego što krenemo na to, pogledajmo zašto je uopšte potrebno vršiti tu konverziju.
Zašto je potrebno pretvoriti niz datuma i vremena u objekt datuma i vremena?
Kada radimo s datumima, nije lako raditi s njima ako su pohranjeni kao obični nizovi. Pretvaranje u format datuma i vremena olakšava taj rad. Nizovi datuma se ponašaju kao obični nizovi, bez posebnih metoda za rad s datumima, već samo s opštim metodama za nizove.
Na primer, ako treba da uporedimo dva datuma, to nije tako jednostavno ako su oni u formatu niza. Ali, ako su u formatu datuma i vremena, možemo koristiti operatore poređenja kao što to činimo s brojevima.
Ovo je samo jedan primer gde pretvaranje u format datuma i vremena olakšava stvari. Postoji još mnogo scenarija, kao što su dodavanje ili oduzimanje datuma, rad s vremenskim zonama, gde nam pretvaranje niza datuma i vremena u objekt datuma i vremena čini posao značajno lakšim.
Sada, pogledajmo različite načine pretvaranja niza datuma i vremena u objekt datuma i vremena. Koristićemo ugrađeni `datetime` modul, kao i `dateutil` modul treće strane. Počnimo s modulom `datetime`.
Korišćenje modula `datetime`
`datetime` je ugrađeni Python modul koji služi za rad s datumima i vremenom. U njemu postoji mnogo klasa koje nam olakšavaju rad s datumima i vremenom. Za konverziju ćemo koristiti klasu `datetime.datetime`.
Klasa `datetime.datetime` ima razne metode, a nas zanima metoda `strptime` koja će nam pomoći pri konverziji. Pogledajmo kako ona funkcioniše.
`datetime.strptime`
Metoda `datetime.strptime` koristi se za pretvaranje niza datuma i vremena u objekt datuma i vremena. Potrebna su joj dva argumenta: niz datuma i vremena i format tog niza. Metoda vraća objekt `datetime`.
Pogledajmo primer:
from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))
Ako pokrenete gornji kod, dobićete sledeći izlaz:
2022-12-19 21:37:56
U ovom primeru, uzeli smo niz datuma i vremena i pretvorili ga u objekt `datetime` koristeći metodu `datetime.strptime`. Važno je osigurati da se format koji dajete metodi tačno podudara s formatom niza datuma i vremena. U suprotnom, može doći do greške ili netačnog rezultata.
Koristili smo određene kodove za formatiranje. Sve kodove za formatiranje možete pronaći u dokumentaciji.
Metoda `datetime.strptime` vraća kompletan datum i vreme. Ako želite dobiti datum i vreme zasebno, možete koristiti metode objekta `datetime`. Pogledajmo kako to radi:
from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" ## getting date separately print("Date:", datetime.strptime(string, formatting).date()) ## getting time separately print("Time:", datetime.strptime(string, formatting).time())
Pokrenite gornji kod i videćete sledeći izlaz:
Date: 2022-12-19 Time: 21:37:56
Metode `date` i `time` će vratiti svoje objekte, respektivno. Oni takođe imaju svoje metode za rad s datumima i vremenom.
U prethodnim primerima smo osigurali tačne nizove i formate za metodu `datetime.strptime`. Ako format nije tačan, dobićemo grešku. Pogledajmo kako se nositi s tim greškama. Pokrenite sledeći kod:
from datetime import datetime string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))
Gornji kod će izazvati grešku jer se format ne podudara s formatom niza datuma i vremena. Da bismo rešili takve greške, možemo koristiti Python-ovu `try-except` strukturu. Dodajmo je:
from datetime import datetime try: string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting)) except ValueError as error: print(error)
Sada, ponovo pokrenite kod. Videćete poruku o grešci, ali kod se neće prekinuti:
time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'
Slično tome, možemo koristiti `try-except` blok i kod metode `parser.parse`. To nam pomaže da izbegnemo prekidanje koda usled greške. Ovo nije specifično za ovaj vodič, ali je koristan savet.
To je sve što se tiče modula `datetime`. Pređimo na modul `dateutil`.
Korišćenje modula `dateutil`
Modul `dateutil` pruža ekstenzije za modul `datetime`. Olakšava rad s datumima i vremenom pomoću mnogih jednostavnih metoda. Instalirajmo modul koristeći sledeću naredbu:
pip install python-dateutil
Metoda koja nas zanima je `dateutil.parser.parse`. Pogledajmo kako pretvoriti niz datuma i vremena u objekt `datetime`.
`parser.parse`
Metoda `parser.parse` prihvata niz datuma i vremena i pretvara ga u odgovarajući format objekta `datetime`. Za ovu metodu ne moramo davati nikakav format. Ona će automatski pretvoriti dati niz datuma i vremena u objekt `datetime`. Pogledajmo primer:
from dateutil import parser string = "19-12-2022 09:37:56 PM" print(parser.parse(string))
Ako pokrenete gornji kod, dobićete sledeći izlaz:
2022-12-19 21:37:56
Niz datuma i vremena mora biti u određenom formatu koji prihvata metoda `parser.parse`. Ako format niza datuma i vremena nije u skladu s očekivanim formatom, doći će do greške. Sve formate koje metoda `parser.parse` prihvata možete proveriti u dokumentaciji.
Budući da metoda `parser.parse` vraća objekt `datetime`, možemo pristupiti datumima i vremenima odvojeno, kao što smo videli kod modula `datetime`. Pogledajmo taj kod:
from dateutil import parser string = "19-12-2022 09:37:56 PM" print("Date:", parser.parse(string).date()) print("Time:", parser.parse(string).time())
Dobićete sledeći izlaz:
Date: 2022-12-19 Time: 21:37:56
Kao što vidite, `dateutil` olakšava rad s datumima i vremenima. Možete istražiti modul u dokumentaciji.
Zaključak
Koristili smo jedan ugrađeni modul i jedan modul treće strane za pretvaranje niza datuma i vremena u objekt `datetime`. Postoji još jedan ugrađeni modul, `time`, koji takođe možemo koristiti za istu svrhu. Pokušajte ga koristiti samostalno. Ne bi trebalo biti teško jer ste već upoznati s radom s sličnim modulima.
Možda postoje i druge biblioteke koje se mogu koristiti za postizanje istog cilja. Moduli koje smo koristili u ovom vodiču su standardni i naširoko korišćeni. Možete istražiti i druge module i odabrati onaj koji vam najviše odgovara.
Takođe, istražite kako izračunati vremensku razliku u Pythonu.
Srećno s kodiranjem! 🙂