datetime
Daty i godziny: tworzenie, formatowanie, odczyt z tekstu i obliczenia na odstępach czasu.
Przykład
#from datetime import datetime, timedelta
start = datetime(2026, 9, 28, 10, 30)
deadline = start + timedelta(days=7)
print(start)
print(deadline.strftime("%d.%m.%Y, godz. %H:%M"))
print((deadline - start).days)
print(deadline > start)Definicja i zastosowanie
#Moduł datetime zawiera klasy do opisu czasu: date (sama data), time (sama godzina), datetime (data z godziną) i timedelta (odstęp czasu, na przykład 7 dni albo 90 minut). Najczęściej importuje się je bezpośrednio: from datetime import datetime, timedelta.
Metoda strftime() zamienia datę na tekst według wzorca, np. %d.%m.%Y daje „28.09.2026”, a datetime.strptime() działa odwrotnie i odczytuje datę z tekstu. Dla standardowego formatu ISO (2026-09-28T10:30:00) są prostsze metody isoformat() i fromisoformat().
Daty porównuje się zwykłymi operatorami < i >, a dodanie timedelta przesuwa datę w przód lub w tył. Odjęcie dwóch dat daje timedelta, z której odczytasz na przykład liczbę dni. Bieżący moment zwraca datetime.now(), a do pracy ze strefami czasowymi służy moduł zoneinfo.
Składnia
#from datetime import date, datetime, timedelta
datetime(year, month, day, hour=0, minute=0, second=0)
datetime.now()
moment.strftime(format)
datetime.strptime(tekst, format)
timedelta(days=0, hours=0, minutes=0)Parametry
#year
int
Rok, np.2026.month
int 1–12
Miesiąc.day
int
Dzień miesiąca. Nieistniejąca data, np. 31 kwietnia, zgłaszaValueError.hour, minute, second
int, domyślnie 0
Godzina, minuta i sekunda.tzinfo
strefa czasowa, opcjonalna
Np.timezone.utcalboZoneInfo("Europe/Warsaw"). Bez niej data nie ma przypisanej strefy.
Więcej przykładów
#from datetime import date, datetime
exam = datetime.strptime("15.10.2026 18:00", "%d.%m.%Y %H:%M")
print(exam)
print(exam.isoformat())
birthday = date.fromisoformat("2012-05-03")
print(birthday.year, birthday.weekday())weekday() numeruje dni od poniedziałku (0) do niedzieli (6), więc 3 oznacza czwartek.
from datetime import date, datetime
exam = date(2026, 12, 15)
days_left = (exam - date.today()).days
print(f"Do egzaminu zostało {days_left} dni")
print(datetime.now().strftime("%H:%M"))Wynik zależy od chwili uruchomienia. 28 września 2026 roku pierwsza linia to „Do egzaminu zostało 78 dni”, a druga pokaże bieżącą godzinę.
Dobre praktyki
#- Nie rozbieraj dat ręcznie przez
split().strptime()ifromisoformat()od razu sprawdzą, czy data jest poprawna. - W f-stringach możesz formatować daty bezpośrednio:
f"{deadline:%d.%m.%Y}". - Do zapisu w JSON i bazach danych używaj formatu ISO, a czas użytkowników z różnych krajów przechowuj w UTC:
datetime.now(timezone.utc).
Powiązane hasła
#- timeWstrzymywanie programu, znaczniki czasu i dokładny pomiar czasu wykonania kodu.
- jsonZamienia dane Pythona na tekst JSON i z powrotem. Podstawa zapisu danych i komunikacji z API.
- f-stringiNapisy z wstawianymi wartościami wyrażeń: f"Masz {punkty} pkt".
- str.format()Wstawia wartości w miejsca oznaczone nawiasami klamrowymi.
Widzisz błąd albo brakuje przykładu? Napisz do nas.