U programiranju se često suočavamo sa situacijama u kojima moramo da radimo sa datumima i vremenima. Te informacije su često predstavljene kao tekstualni nizovi u raznim oblicima. Međutim, za obavljanje mnogih operacija, neophodno je da te nizove transformišemo u datetime ili time objekte u Pythonu.
Ovaj postupak transformacije je ključan za svaku manipulaciju datumima i vremenima u Pythonu, jer nam omogućava da:
- Izvršimo matematičke operacije nad datumima, kao što su sabiranje ili oduzimanje dana, meseci ili godina.
- Uporedimo datume i vremena, da bismo utvrdili koji je raniji ili kasniji.
- Formatiramo datume i vremena prema sopstvenim zahtevima.
- Filtriramo ili sortiramo podatke na osnovu datuma i vremena.
U ovom članku detaljno ćemo razmotriti razne načine za pretvaranje tekstualnih nizova u datetime ili time objekte u Pythonu, uz konkretne primere i pojašnjenja.
Metode Konverzije
1. Korišćenje modula datetime
Modul datetime u Pythonu pruža funkcionalnosti za rad sa datumima i vremenima. Klasa datetime unutar ovog modula omogućava nam da stvorimo objekte koji predstavljaju i datum i vreme.
from datetime import datetime
# Konverzija niza u datetime objekat
datum_niz = "2023-04-20"
datum_objekat = datetime.strptime(datum_niz, "%Y-%m-%d")
print(datum_objekat)
# Izlaz: 2023-04-20 00:00:00
U ovom primeru smo koristili funkciju strptime() iz klase datetime. Ova funkcija prihvata dva argumenta: niz koji želimo da konvertujemo i formatni obrazac. Formatni obrazac nam govori kako je niz struktuiran – u ovom slučaju, godina-mesec-dan.
2. Korišćenje modula time
Modul time u Pythonu nam nudi mogućnosti za manipulaciju vremenom. Klasa time iz ovog modula omogućava da kreiramo objekte koji predstavljaju samo vreme.
from time import strptime
# Konverzija niza u time objekat
vreme_niz = "10:30:45"
vreme_objekat = strptime(vreme_niz, "%H:%M:%S")
print(vreme_objekat)
# Izlaz: time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=10, tm_min=30, tm_sec=45, tm_wday=0, tm_yday=1, tm_isdst=-1)
Ovde smo koristili funkciju strptime() iz modula time. Ona takođe prima dva argumenta: niz za konverziju i formatni obrazac. Formatni obrazac specificira strukturu niza – ovde, sati:minuti:sekunde.
3. Korišćenje funkcije parse iz modula dateutil
Modul dateutil pruža napredne funkcije za obradu datuma i vremena u Pythonu. Funkcija parse iz ovog modula može automatski prepoznati format niza i prevesti ga u datetime objekat.
from dateutil.parser import parse
# Konverzija niza u datetime objekat
datum_niz = "20/04/2023"
datum_objekat = parse(datum_niz)
print(datum_objekat)
# Izlaz: 2023-04-20 00:00:00
U ovom slučaju, funkcija parse() je sama detektovala format niza i transformisala ga u datetime objekat.
Značajni formatni obrasci
1. Obrasci za datum:
- %Y: Godina sa 4 cifre (npr. 2023)
- %m: Mesec kao broj (01-12)
- %d: Dan u mesecu (01-31)
- %B: Puno ime meseca (npr. mart)
- %A: Puno ime dana u nedelji (npr. sreda)
- %w: Dan u nedelji (0-6, gde je 0 nedelja)
2. Obrasci za vreme:
- %H: Sat u 24-časovnom formatu (00-23)
- %I: Sat u 12-časovnom formatu (01-12)
- %M: Minut (00-59)
- %S: Sekunda (00-59)
- %p: AM/PM indikator
Primeri
1. Konverzija niza sa datumom i vremenom:
from datetime import datetime
datum_vreme_niz = "2023-04-20 10:30:45"
datum_vreme_objekat = datetime.strptime(datum_vreme_niz, "%Y-%m-%d %H:%M:%S")
print(datum_vreme_objekat)
# Izlaz: 2023-04-20 10:30:45
2. Konverzija niza sa datumom i vremenom u različitim formatima:
from datetime import datetime
datum_vreme_niz = "20/04/2023 10:30:45 PM"
datum_vreme_objekat = datetime.strptime(datum_vreme_niz, "%d/%m/%Y %H:%M:%S %p")
print(datum_vreme_objekat)
# Izlaz: 2023-04-20 22:30:45
3. Konverzija niza sa datumom i vremenom u ISO formatu:
from datetime import datetime
datum_vreme_niz = "2023-04-20T10:30:45Z"
datum_vreme_objekat = datetime.fromisoformat(datum_vreme_niz)
print(datum_vreme_objekat)
# Izlaz: 2023-04-20 10:30:45+00:00
Zaključak
Transformacija tekstualnih nizova u datetime ili time objekte u Pythonu je fundamentalna veština za rad sa datumima i vremenima. Poznavanje različitih metoda transformacije, formatnih obrazaca i funkcija koje se koriste u modulima datetime, time i dateutil omogućava programerima da lako upravljaju i analiziraju podatke o datumu i vremenu.
Često Postavljana Pitanja
1. Kako da konvertujem niz u datetime objekat ako ne znam format niza?
U ovom slučaju, možete koristiti funkciju parse iz modula dateutil. Ova funkcija će pokušati automatski da prepozna format niza i da ga pretvori u datetime objekat.
2. Kako da proverim format niza pre konverzije?
* Možete koristiti funkciju strptime sa raznim formatnim obrascima. Ako funkcija uspešno konvertuje niz, to znači da je format niza ispravan.
3. Kako da konvertujem datetime objekat nazad u niz?
Možete koristiti funkciju strftime iz modula datetime. Funkcija prima formatni obrazac i datetime objekat kao argumente i vraća niz u zadatom formatu.
4. Da li mogu da konvertujem niz u time objekat ako on sadrži i datum?
* Da, možete koristiti funkciju strptime sa formatnim obrascem koji se odnosi samo na vreme. Na primer, ako niz sadrži datum u formatu „2023-04-20“ i vreme u formatu „10:30:45“, možete koristiti obrazac „%H:%M:%S“ da biste izdvojili samo vreme.
5. Da li datetime objekat može da sadrži vremensku zonu?
Da, datetime objekat može da sadrži vremensku zonu. Možete koristiti funkciju replace da biste promenili vremensku zonu datetime objekta.
6. Kako da dodajem ili oduzimam vreme od datetime objekta?
Možete koristiti funkciju timedelta iz modula datetime. Funkcija prima kao argument vremensku razliku u danima, satima, minutima i sekundama.
7. Šta se događa kada se konvertuje niz koji nije validan datum ili vreme?
* U tom slučaju, funkcija strptime će izazvati grešku.
8. Kako da konvertujem niz u datetime objekat ako se format niza menja?
* Možete koristiti regularne izraze da biste izdvojili komponente datuma i vremena iz niza, a zatim da ih iskoristite za formiranje datetime objekta.
9. Kako da konvertujem niz u datetime objekat ako je u lokalnom formatu?
* Možete koristiti funkciju strptime sa formatnim obrascem koji odgovara lokalnom formatu.
10. Kako da proverim da li je datetime objekat validan?
Možete koristiti funkciju isoformat da biste konvertovali datetime objekat u ISO format. Ako se ne pojavi greška, datetime objekat je validan.
Tagovi: Python, datetime, time, konverzija niza, datum, vreme, formatiranje, modul datetime, modul time, dateutil, strptime, strftime, obrazac, ISO format, vremenska zona, timedelta, validacija