Datumi u Pajtonu. Sabiranje dana, nedelja, meseci i godina

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