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 razemtimedelta— czas trwania / przedział (różnica między dwoma momentami)
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
datetime.now() # current date + time
date.today() # current date onlyArytmetyka z timedelta
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.
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.
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):
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
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`.
Pokaż wskazówkę
base + timedelta(days=30), a następnie .strftime
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
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).
Pokaż wskazówkę
strptime z włoskim wzorcem formatowania.
Rozwiązanie dostępne po 3 próbach
Dodatkowe wyzwanie
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ą.
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