Cel: po tym rozdziale:
- odczytasz dzisiejszą datę i godzinę,
- sformatujesz je do ładnego tekstu,
- policzysz różnicę między datami,
- dodasz lub odejmiesz dni i godziny,
- poznasz strefy czasowe i unikniesz typowych wpadek.
1) Podstawowe klocki: date, time, datetime
Python ma trzy typy obiektów do pracy z czasem:
| Typ | Co przechowuje |
|---|---|
date | samą datę (rok, miesiąc, dzień) |
time | samą godzinę (godziny, minuty, sekundy) |
datetime | datę i godzinę razem |
from datetime import date, time, datetime
dzis = date.today()
print(dzis) # np. 2025-09-11
teraz = datetime.now()
print(teraz) # np. 2025-09-11 15:42:03.123456
Chcesz złożyć konkretny moment z daty i godziny?
wigilia = date(2025, 12, 24)
godzina = time(18, 30)
spotkanie = datetime.combine(wigilia, godzina)
print(spotkanie) # 2025-12-24 18:30:00
2) Ładne wyświetlanie i wczytywanie – strftime i strptime
strftime: obiekt ➜ napisstrptime: napis ➜ obiekt
Najczęściej używane kody:
%d– dzień (01-31)%m– miesiąc (01-12)%Y– pełny rok (np. 2025)%H:%M– godzina i minuty w 24h%A– nazwa dnia tygodnia
from datetime import datetime
teraz = datetime.now()
print(teraz.strftime("%d.%m.%Y, %H:%M")) # np. 11.09.2025, 15:42
dt = datetime.strptime("31.12.2025 23:59", "%d.%m.%Y %H:%M")
print(dt) # 2025-12-31 23:59:00
💡 Uwaga na częste pomyłki:
%mto miesiąc,%Mto minuty.%Hto 24-godziny,%Ito 12-godziny (z%pdla AM/PM).
3) Dodawanie, odejmowanie i różnice – timedelta
Do przesuwania dat i liczenia różnic używamy timedelta.
from datetime import datetime, timedelta
start = datetime.strptime("01.10.2025 09:00", "%d.%m.%Y %H:%M")
deadline = start + timedelta(days=7) # +7 dni
print(deadline.strftime("%d.%m.%Y %H:%M")) # 08.10.2025 09:00
roznica = deadline - start
print(roznica.days) # 7
print(roznica.total_seconds()) # 604800.0
Działa też dla samych dat:
from datetime import date, timedelta
dzis = date.today()
za_30_dni = dzis + timedelta(days=30)
print(za_30_dni)
4) Który to dzień tygodnia?
from datetime import date
d = date(2025, 9, 11)
print(d.weekday()) # 0=pon, 6=niedz
print(d.isoweekday()) # 1=pon, 7=niedz
# Funkcja: najbliższy poniedziałek
from datetime import timedelta
def najblizszy_poniedzialek(d):
return d + timedelta(days=(7 - d.weekday()) % 7)
print(najblizszy_poniedzialek(d))
5) Czekanie i mierzenie czasu – moduł time
import time
start = time.perf_counter()
time.sleep(1.5) # pauza ~1.5 s
elapsed = time.perf_counter() - start
print(f"Minęło: {elapsed:.3f} s")
Przydatne do testów wydajności lub odliczania.
6) Strefy czasowe – to samo „teraz” w różnych miejscach
Domyślnie datetime nie wie, w jakiej strefie jest czas.
Lepsze są tzw. świadome daty z biblioteką zoneinfo.
from datetime import datetime
from zoneinfo import ZoneInfo
warszawa = ZoneInfo("Europe/Warsaw")
now_waw = datetime.now(warszawa)
print(now_waw) # 2025-09-11 15:42:03+02:00
now_ny = now_waw.astimezone(ZoneInfo("America/New_York"))
print(now_ny) # ten sam moment w NY
💡 Wskazówka:
- Do obliczeń najlepiej trzymaj czas w UTC,
- A dopiero przy wyświetlaniu zamieniaj na lokalną strefę.
utc = ZoneInfo("UTC")
teraz_utc = datetime.now(utc)
print(teraz_utc.isoformat())
7) Standard ISO 8601 – uniwersalny zapis
Python łatwo zapisuje daty w standardzie ISO 8601:
from datetime import datetime
from zoneinfo import ZoneInfo
dt = datetime(2025, 9, 11, 15, 30, tzinfo=ZoneInfo("Europe/Warsaw"))
print(dt.isoformat()) # 2025-09-11T15:30:00+02:00
odczytany = datetime.fromisoformat("2025-09-11T15:30:00+02:00")
print(odczytany)
8) Małe, praktyczne przykłady
A) Ile dni do Świąt?
from datetime import date
def dni_do(rok, miesiac, dzien):
return (date(rok, miesiac, dzien) - date.today()).days
print("Do Świąt:", dni_do(2025, 12, 24), "dni")
B) Spotkanie jutro o 9:00 (ze strefą)
from datetime import datetime, time, timedelta
from zoneinfo import ZoneInfo
tz = ZoneInfo("Europe/Warsaw")
jutro_9 = datetime.combine((datetime.now(tz) + timedelta(days=1)).date(), time(9, 0), tz)
print(jutro_9.isoformat())
C) Stempel czasu do logów
from datetime import datetime, timezone
def stempel():
return datetime.now(timezone.utc).isoformat()
print(stempel())
9) Typowe wpadki i jak ich uniknąć
| Problem | Dlaczego | Rada |
|---|---|---|
Naiwny datetime | brak strefy czasowej | zawsze używaj tzinfo i trzymaj w UTC |
%m vs %M | miesiąc ≠ minuty | pamiętaj: m – miesiąc, M – minuty |
| „30 dni = miesiąc” | miesiące mają 28–31 dni | przy prawdziwych miesiącach użyj biblioteki dateutil |
| Zmiana czasu (DST) | przesunięcia godzin w marcu/październiku | trzymaj dane w UTC, na końcu konwertuj |
10) Zadania do samodzielnego zrobienia
- Program, który pokazuje ile dni zostało do Twoich urodzin.
- Harmonogram spotkań: zapisz w pliku daty i godziny, a potem odczytaj i policz, które spotkanie jest najbliżej.
- Licznik czasu: podaj datę początkową i zobacz, ile sekund minęło.
- Automatyczny stempel logowania w formacie ISO 8601.
- Funkcja, która przyjmuje datę i zwraca dzień tygodnia po polsku.
Co zabierasz z odcinka 11?
- Umiesz pobrać i wyświetlić bieżącą datę i godzinę.
- Wiesz, jak formatować i parsować daty i godziny.
- Potrafisz dodawać/odejmować dni i godziny oraz liczyć różnice.
- Znasz podstawy stref czasowych i zapis ISO 8601.
- Umiesz tworzyć praktyczne skrypty: liczenie dni do wydarzenia, stempel logów, harmonogramy.

