Przejdź do głównej treści
eLearner.app
Moduł 8 · Lekcja 2 z 430/36 w kursie~12 min
Lekcje modułu (2/4)

datetime: daty i czas

Moduł datetime dostarcza klasy służące do reprezentowania dat i czasu.

Trzy główne klasy

  • date — tylko data (rok, miesiąc, dzień)
  • time — tylko czas (godzina, minuta, sekunda, mikrosekunda)
  • datetime — data i czas razem
  • timedeltaczas trwania / przedział (różnica między dwoma momentami)
Python
from datetime import date, time, datetime, timedelta

date(2025, 1, 1)                  # datetime.date(2025, 1, 1)
time(14, 30, 0)                   # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0)   # datetime.datetime(2025, 1, 1, 14, 30)

„Teraz”: now i today

Python
datetime.now()        # current date + time
date.today()          # current date only

Arytmetyka z timedelta

Python
from datetime import datetime, timedelta

ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)

# difference between two datetimes -> timedelta
delta = domani - ora
delta.days        # 1
delta.total_seconds()   # 86400.0

```timedeltaprzyjmuje argumentydays, seconds, microseconds, milliseconds, minutes, hours, weeks(NIE przyjmujemonthsaniyears`, ponieważ ich długość jest niejednoznaczna).

Formatowanie: strftime

Konwertuje obiekt datetime → ciąg znaków (string) zgodnie z podanym wzorcem.

Python
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d")         # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M")   # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y")      # 'Wednesday 01 January 2025' (locale-dependent)

Najczęściej używane formaty: %Y 4-cyfrowy rok, %m 2-cyfrowy miesiąc, %d 2-cyfrowy dzień, %H godzina w formacie 24h, %M minuty, %S sekundy.

Parsowanie: strptime

Operacja odwrotna: ciąg znaków → datetime na podstawie oczekiwanego wzorca.

Python
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)

ISO 8601

Przy wymianie danych zawsze preferuj format ISO 8601 (RRRR-MM-DDTHH:MM:SS):

Python
ora.isoformat()                 # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")

Strefy czasowe i obiekty datetime świadome strefy (aware)

Domyślnie obiekty datetime w Pythonie są nieświadome strefy (naive - nie zawierają informacji o strefie czasowej). W rzeczywistych aplikacjach dobrą praktyką jest uczynienie ich świadomymi strefy (aware) poprzez ustawienie informacji o strefie za pomocą datetime.timezone.utc lub modułu zoneinfo.

Spróbuj sam

Ćwiczenie#python.m8.l2.e1
Próby: 0Ładowanie...

Wyznacz datę wypadającą 30 dni po 1 stycznia 2025 roku i sformatuj ją jako 'RRRR-MM-DD' w zmiennej `date_str`. Oceń `date_str`.

Ładowanie edytora...
Pokaż wskazówkę

base + timedelta(days=30), a następnie .strftime

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#python.m8.l2.e2
Próby: 0Ładowanie...

Dla podanego ciągu znaków `s = '15/03/2025'`, sparsuj go metodą strptime do zmiennej `d` (obiekt datetime). Oceń całkowitoliczbowy dzień tygodnia `d.weekday()` (0=Pon, 6=Niedz).

Ładowanie edytora...
Pokaż wskazówkę

strptime z włoskim wzorcem formatowania.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#python.m8.l2.e3
Próby: 0Ładowanie...

Zaimportuj `date` z modułu `datetime`. Oblicz różnicę w dniach między 25 grudnia 2026 roku (`date(2026, 12, 25)`) a 20 grudnia 2026 roku (`date(2026, 12, 20)`). Zapisz całkowitą liczbę dni (używając atrybutu `.days` obiektu delta) w zmiennej `days_diff`. Na koniec oceń tę zmienną.

Ładowanie edytora...
Pokaż wskazówkę

Różnica między dwoma datami zwraca obiekt timedelta. Uzyskaj dostęp do całkowitej liczby dni poprzez delta.days.

Rozwiązanie dostępne po 3 próbach