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