U radu sa datumima često je potrebno dodati ili oduzeti određene vremenske jedinice. Python sadrži dobre module, ali postoje i eksterne biblioteke za složenije operacije poput dodavanja meseci.
1. Dodavanje dana i nedelja (timedelta)
Za dodavanje dana ili nedelja koristimo klasu timedelta iz modula datetime. Ova klasa automatski vodi računa o prelasku u novi mesec ili godinu.
from datetime import datetime, timedelta
# Kreiranje datuma iz stringa
datum_str = '24-09-2026'
datum = datetime.strptime(datum_str, '%d-%m-%Y')
# Dodavanje 3 dana
novi_datum = datum + timedelta(days=3)
print(f"Nakon 3 dana: {novi_datum}") # 2026-09-27
# Dodavanje 2 nedelje
dve_nedelje = datum + timedelta(weeks=2)
print(f"Nakon 2 nedelje: {dve_nedelje}") # 2026-10-08
Savet: timedelta podržava i argumente: hours, minutes, seconds.
2. Dodavanje meseci (relativedelta)
Standardna biblioteka nema direktnu podršku za dodavanje meseci jer oni traju različit broj dana. Najbolje rešenje je biblioteka python-dateutil.
Instalacija:
pip install python-dateutil
from datetime import date
from dateutil.relativedelta import relativedelta
danas = date(2026, 7, 21)
# Dodavanje 3 meseca
buducnost = danas + relativedelta(months=+3)
print(buducnost) # 2026-10-21
3. Dodavanje godina (replace)
Za dodavanje godina najsigurnije je koristiti metodu replace(). Međutim, moramo paziti na prestupne godine (npr. ako je trenutni datum 29. februar).
from datetime import datetime
def dodaj_godine(pocetni_datum, godine):
try:
return pocetni_datum.replace(year=pocetni_datum.year + godine)
except ValueError:
# Rešavanje slučaja 29. februara u neprestupnoj godini
return pocetni_datum.replace(year=pocetni_datum.year + godine, day=28)
danas = datetime.today() # danasnji datum.
rezultat = dodaj_godine(danas, 2)
print(f"Datum u 2028: {rezultat.date()}")
Formatiranje izlaza
Ako vam je potreban specifičan format ispisa, najlakše je koristiti f-stringove:
print(f"Formatiran datum: {rezultat:%d.%m.%Y. %H:%M}")
# Ispisuje npr: 05.02.2028. 20:50