Moduł datetime w Pythonie: opanuj sztukę czasu i dat
Dokumentacja: pełną i wiarygodną dokumentację modułu datetime znajdziesz na oficjalnej stronie: docs.python.org
Kluczowe klasy modułu datetime
Moduł ten dostarcza kilka ściśle powiązanych ze sobą klas, które reprezentują różne aspekty czasu:
| date | Reprezentuje datę, składającą się z roku, miesiąca i dnia. Przydatna, gdy potrzebujesz pracować tylko z kalendarzem bez uwzględniania godzin. |
| time | Reprezentuje czas, składający się z godziny, minuty, sekundy i mikrosekundy. Często używana do reprezentacji stałych pór dnia. |
| datetime | Najczęściej używana klasa, będąca połączeniem date i time, przechowująca pełną informację o dacie i czasie zdarzenia. |
| timedelta | Reprezentuje różnicę (interwał) między dwoma instancjami date, time lub datetime. Jest niezbędna do dodawania i odejmowania czasu. |
| tzinfo | Klasa abstrakcyjna służąca do obsługi stref czasowych, pozwalająca tworzyć tzw. obiekty "aware" (świadome strefy czasowej), w przeciwieństwie do obiektów "naive" (naiwnych), które nie zawierają informacji o strefie czasowej. |
Przykład 1: cyfrowy zegar (gg:mm:ss)
Aby stworzyć symulację zegara cyfrowego, używamy metody datetime.now() do pobrania bieżącej chwili oraz strftime() (string format time) do sformatowania jej. Zauważ, że importujemy moduł time tylko po to, by użyć funkcji sleep() do zatrzymania pętli na 1 sekundę.
from datetime import datetime
import time
def prosty_zegar(sekundy=5):
"""Wyświetla bieżący czas w formacie gg:mm:ss i odświeża co sekundę."""
print(f"--- Zegar działa przez {sekundy} sekund ---")
# Kody formatowania: %H (Godzina 24h), %M (Minuta), %S (Sekunda)
format_czasu = "%H:%M:%S"
for _ in range(sekundy):
teraz = datetime.now()
sformatowany_czas = teraz.strftime(format_czasu)
# Użycie '\r' pozwala na nadpisanie poprzedniej linii w konsoli
print(f"Bieżący czas: {sformatowany_czas}", end='\r')
time.sleep(1)
print("\n--- Koniec działania zegara ---")
# Wywołanie funkcji
prosty_zegar(10)
| Źródło: | Nazwa: |
|---|---|
| Centrum Pobierania | post_28_1pl |
Przykład 2: fajny datownik i elastyczne formatowanie
Siła modułu datetime leży w jego wszechstronnym formatowaniu. Metoda strftime() pozwala na transformację obiektu datetime w czytelny ciąg znaków, używając specjalnych dyrektyw.
| %A | Pełna nazwa dnia tygodnia. | Wtorek |
| %d | Dzień miesiąca (z zerem). | 07 |
| %B | Pełna nazwa miesiąca. | Październik |
| %Y | Rok z czterema cyframi. | 2025 |
| %j | Dzień roku (001-366). | 280 |
from datetime import datetime
# Pobranie pełnego obiektu datetime
teraz = datetime.now()
# Tworzenie eleganckiego datownika
# Użycie odpowiednich dyrektyw do stworzenia formatu "Dziś jest: Wtorek, 07 Października 2025 r."
elegancki_datownik = teraz.strftime("Dziś jest: %A, %d %B %Y r.")
print("\n--- Fajny Datownik ---")
print(elegancki_datownik)
# Inny przykład: Skrócony format międzynarodowy + Dzień Roku
datownik_tech = teraz.strftime("%Y-%m-%d (Dzień roku: %j)")
print(f"Format techniczny: {datownik_tech}")
input('\nNaciśnij - Enter\n')
| Źródło: | Nazwa: |
|---|---|
| Centrum Pobierania | post_28_2pl |
Przykład 3: arytmetyka czasu z timedelta
Klasa timedelta jest sercem operacji na czasie, pozwalając na precyzyjne dodawanie lub odejmowanie interwałów czasowych (dni, godziny, minuty, sekundy) od obiektu datetime.
from datetime import datetime, timedelta
dzisiaj = datetime.now()
# Obliczenie daty za 10 dni i 12 godzin
za_10_dni = dzisiaj + timedelta(days=10, hours=12)
# Obliczenie daty 3 tygodnie temu
trzy_tygodnie_temu = dzisiaj - timedelta(weeks=3)
print("\n--- Operacje na Czasie (timedelta) ---")
print(f"Dziś: {dzisiaj.strftime('%Y-%m-%d %H:%M')}")
print(f"Za 10 dni i 12h: {za_10_dni.strftime('%Y-%m-%d %H:%M')}")
print(f"3 tygodnie temu: {trzy_tygodnie_temu.strftime('%Y-%m-%d %H:%M')}")
# Obliczenie różnicy (timedelta) między dwoma datami
stworzona_data = datetime(year=2023, month=1, day=14, hour=21)
roznica = dzisiaj - stworzona_data
print(f"\nRóżnica od 15.01.2023 (21:00): {roznica.days} dni i {roznica.seconds // 3600} godzin.")
input('\nNaciśnij - Enter\n')
| Źródło: | Nazwa: |
|---|---|
| Centrum Pobierania | post_28_3pl |
Podsumowanie
Moduł datetime to wszechstronny moduł w standardowej bibliotece Pythona. Opanowanie datetime.now(), strftime() do formatowania oraz timedelta do arytmetyki czasu pozwala na efektywną obsługę niemal każdego scenariusza związanego z czasem w Twoich aplikacjach. Choć obsługa stref czasowych (tzinfo) może wymagać czasem użycia zewnętrznych bibliotek (jak np. pytz lub dateutil dla większej wygody), sam moduł datetime zapewnia solidną bazę dla wszystkich podstawowych operacji.
Bezpieczeństwo i jakość kodu w Kajotte Studio
Wszystkie kody źródłowe w tym repozytorium przechodzą automatyczny proces weryfikacji (CI/CD) przy użyciu GitHub Actions: Python Learning Lab: Datetime Module
👇
▒ Przewodnik po blogu: wszystkie posty o programowaniu w jednym miejscu. ▹ Zobacz