Python datetime – kapsułka podstaw

Lekcja moduł datetime

Moduł datetime w Pythonie przyda się prędzej niż później. Dlatego warto zapoznać się z tym modułem prędzej. Dzięki niemu odczytujemy daty i czas. Spotkacie użycia datetime nawet w małym skrypcie, jak i większym projekcie.

Moduł w pythonie czy w innych językach spotkacie się z określeniem bibliteka, albo pakiet – innymi słowy dodatkowy zasób, którym można rozszerzyć podstawowe działanie naszego kodu. Tutaj datetime jest w Pythona wbudowany i nic dodatkowo nie potrzebujemy poza jego zaimportowaniem. Dajemy znać, dla naszego pliku Pythonowego, że będziemy potrzebować dodatkowe funkcjonalności.

PS: jeśli dopiero uczysz się Pythona z mojego kursu, to potraktuj tę lekcję jako „side quest”. Ciekawostkę, ale jeśli lekcja jest za trudna odłóż ją i tyle – wrócisz, gdy będziesz jej potrzebować.

Do czego przydaje się moduł datetime? Na przykład:

  • sprawdzimy aktualną datę i godzinę,
  • utworzymy zmienne na własne daty i godziny,
  • policzymy różnicę między dwiema datami (np. ile dni zostało nam do urlopu),
  • sformatujemy daty do czytelnych napisów,
  • wczytamy datę z tekstu (np. „2025-07-30”) do formatu daty,
  • strefy czasowe – porównamy daty dla różnych stref czasowych

Krok 1 czyli import modułu datetime

Zaczynamy od importu. Możemy wczytać cały moduł:

import datetime

lub konkretne jego elementy:

from datetime import date, datetime, time, timedelta

Obie metody są poprawne. Pierwsza daje nam dostęp do wszystkiego przez datetime.nazwa. Gdzie nazwa to konkretna metoda, której chcemy użyć i należy do modułu.

import datetime

print(datetime.datetime.now())
print(datetime.date.today())

W drugim przypadku zapis jest krótszy, ale trzeba pamiętać, co dokładnie importowaliśmy:

from datetime import datetime, date

print(datetime.now())
print(date.today())

Aktualna data i czas

Podstawowa sprawa i wasze najczęstrze pytanie czyli jak sprawdzić w Pythonie czas teraz aka pobranie bieżącej daty i godziny.

import datetime

now = datetime.datetime.now()
print(now)

Przykładowy wynik:

2022-09-07 14:26:49.219717

Obiekt zwrócony przez now() ma w sobie rok, miesiąc, dzień, godzinę, minuty, sekundy i mikrosekundy. Co znaczy, że do każdego z tych elementów możemy się dostać!
timestamp format

Tylko data bez godziny

Jeśli interesuje nas wyłącznie data – możemy wycinać z datetime.datetime.now(), ale wygodniej będzie skorzystać z datetime.date.today().

import datetime

dzisiaj = datetime.date.today()
print(dzisiaj)

Wynik:

2025-07-30

Zwrćcie uwagę, że korzystamy już nie z obiektu datetime.datetime a datetime.date – jest różnica 😉

Co siedzi w module datetime?

Ciekawi Was co tak naprawdę jest zawarte wewnątrz datetime. Możemy podejrzeć wszystkie elementy modułu:

import datetime
print(dir(datetime))

Ale tak naprawdę najczęściej używane:

  • datetime.datetime – data i czas,
  • datetime.date – tylko data,
  • datetime.time – tylko czas,
  • datetime.timedelta – różnice między datami,
  • datetime.timezone – strefy czasowe.

Tworzenie własnych dat

Co jeśli chcemy z danych posiadanych tj. np. zwykłych tekstów utworzyć datę – rozumianą przez Pythona jako data.

Możemy stworzyć datę z poprostu podanych liczb
np. utworzę urodziny mojej Figi 🐶

import datetime

figa_birthday = datetime.date(2019, 08, 01)
print(figa_birthday)

Wynik:

2019-08-01

Data z timestampu?

Jeżeli mamy timestamp (czyli liczbę sekund od 1 stycznia 1970) możemy znaleźć konkretną datę za pomocą metody fromtimestamp()

from datetime import date

ts = 667036800
data = date.fromtimestamp(ts)
print(data)
1991-02-20 # 20 luty 1991

Ciekawostka: Pierwsza oficjalna wersja języka Python, oznaczona jako 0.9.0, została wydana 20 lutego 1991 roku!

Wyciągamy rok, miesiąc i dzień

Każdy obiekt daty ma atrybuty roku, miesiąca i dnia czyli year, month i day:

from datetime import date

dzisiaj = date.today()
print("Rok:", dzisiaj.year)
print("Miesiąc:", dzisiaj.month)
print("Dzień:", dzisiaj.day)

Czas czas czas…

Obiekt time przechowuje godzinę hour, minuty minute, sekundy second (i mikrosekundy) i tak też możemy informacje wyciągać

from datetime import time

t1 = time()
t2 = time(11, 34, 56)
t3 = time(11, 34, 56, 500000)

print(t1)
print(t2)
print(t3)

Możemy odczytać atrybuty:

print("Godzina:", t2.hour)
print("Minuty:", t2.minute)
print("Sekundy:", t2.second)

Data i czas razem (datetime)

Klasa datetime łączy datę i czas:

from datetime import datetime

dt1 = datetime(2022, 7, 30)
dt2 = datetime(2022, 7, 30, 15, 45, 30)

print(dt1)
print(dt2)

Różnice czasu (timedelta)

Obiekt timedelta pozwala na obliczenia na datach

from datetime import date, timedelta

data1 = date(2022, 8, 5)
data2 = date(2022, 7, 30)

roznica = data1 - data2
print(roznica)

Dodawanie dni:

nowa_data = data2 + timedelta(days=10)
print(nowa_data)

Formatowanie dat (strftime)

Możemy sformatować datę do czytelnego napisu, jeśl ito co mamy jest dla nas mało czytelne 😉

Przydatne kody:

  • %Y – rok
  • %m – miesiąc
  • %d – dzień
  • %H – godzina
  • %M – minuta
  • %S – sekunda
from datetime import datetime

teraz = datetime.now()

print(teraz.strftime("%Y-%m-%d %H:%M:%S"))
print(teraz.strftime("%d/%m/%Y"))
print(teraz.strftime("%A, %d %B %Y"))

…kod %A w strftime() zwraca pełną nazwę dnia tygodnia (np. Monday, Tuesday), a kod %B zwraca pełną nazwę miesiąca (np. January, February).
Są też skrócone wersje:

  • %a – skrócona nazwa dnia tygodnia (np. Mon, Tue)
  • %b – skrócona nazwa miesiąca (np. Jan, Feb)

Podsumowując poniżej tabela z popularnymi kodami i ich znaczeniem:

Kod Znaczenie Przykład
%Y Rok (pełny, cztery cyfry) 2025
%y Rok (ostatnie dwie cyfry) 25
%m Miesiąc (liczba, 01–12) 07
%B Pełna nazwa miesiąca July
%b Skrócona nazwa miesiąca Jul
%d Dzień miesiąca (01–31) 30
%A Pełna nazwa dnia tygodnia Wednesday
%a Skrócona nazwa dnia tygodnia Wed
%H Godzina (24h) 14
%I Godzina (12h) 02
%M Minuta 05
%S Sekunda 09
%p AM/PM PM

Mała uwaga:
Jeżeli chcemy, aby strftime() zwracało nam polskie nazwy dni tygodnia i miesięcy, musimy ustawić odpowiednią lokalizację:

import locale
from datetime import datetime

locale.setlocale(locale.LC_TIME, "pl_PL.UTF-8")

# na Windows czasem trzeba użyć:
# locale.setlocale(locale.LC_TIME, "Polish_Poland")

teraz = datetime.now()

print(teraz.strftime("%A, %d %B %Y"))
# przykładowy wynik: środa, 30 lipca 2025

Parsowanie tekstu na datę (strptime)

Zamieniamy tekst na obiekt daty:

from datetime import datetime

tekst = "25-12-2025"
data = datetime.strptime(tekst, "%d-%m-%Y")
print(data)

pierwsze logo google

Starsi niż Google?

Ciekawostka: Google powstało 4 września 1998 roku.

Zróbmy, więc z tego obiekt daty date(YYYY, MM, DD)

from datetime import date

google_start = date(1998, 9, 4)
print("Google powstało:", google_start)

Czy jesteś starszy niż Google?

Mały żarcik (tak, ja jestem starsza niż Google), ale i dobry przykład porównywania dat. Sprawdzimy to prostym warunkiem:

from datetime import datetime, date

google_start = date(1998, 9, 4)

birthdate_str = input("Podaj swoją datę urodzenia (RRRR-MM-DD): ")
birthdate = datetime.strptime(birthdate_str, "%Y-%m-%d").date()

if birthdate < google_start:
    print("Jesteś starszy niż Google!")
else:
    print("Google jest starsze niż Ty.")

Tak po prostu birthdate < google_start - nic więcej nie potrzeba, w przykładzie powyżej zadziała porównanie dat. Python od razu sprawdza, która z nich jest wcześniejsza.

Strefy czasowe (pytz)

W Pythonie mamy też warty uwagi moduł pytz, dzięki czemu możemy pracować ze strefami czasowymi:

from datetime import datetime
import pytz

warszawa = pytz.timezone('Europe/Warsaw')
ny = pytz.timezone('America/New_York')

czas_wawa = datetime.now(warszawa)
czas_ny = datetime.now(ny)

print("Warszawa:", czas_wawa)
print("Nowy Jork:", czas_ny)

datetime jest modułem, który jak widać rozwiązuje mnóstwo codziennych problemów z datami i godzinami. I tak wszyscy je mamy oraz - nie programiści tego na pamięć nie umieją 😉 Wiem, że wydaje się, że dzisiejsza lekcja to naprawdę dużo, ale im więcej będziemy z nim pracować, tym szybciej te operacje staną się odruchowe.

ZADANIA

Zadanie 1 – ile dni do końca roku
Napisz program, który pobierze dzisiejszą datę i policzy, ile dni zostało do końca bieżącego roku.

Zadanie 2 – kiedy wypada najbliższy weekend
Napisz program, który sprawdzi, w ile dni od dzisiaj wypada najbliższa sobota.
Podaj datę najbliższego weekendu.

Zadanie 3 – ile dni do ważnej daty
Napisz program, który zapyta użytkownika o ważną datę (format RRRR-MM-DD).
Policz, ile dni zostało do tej daty od dnia dzisiejszego.
Jeśli data już minęła, poinformuj użytkownika o ile dni jest „po czasie”.

Zadanie 4 – starszy niż Python czy iPhone?
Python w wersji 1.0 pojawił się 20 lutego 1991 roku, a pierwszy iPhone trafił do sprzedaży 29 czerwca 2007 roku.
Poproś użytkownika o datę urodzenia i sprawdź:
– czy jest starszy niż Python,
– czy jest starszy niż iPhone.
Wyświetl odpowiednie komunikaty dla obu porównań.

Zadanie 5 – weekend checker
Napisz program, który zapyta użytkownika o dowolną datę i sprawdzi, czy wypada ona w weekend (sobota lub niedziela).
Jeżeli tak – wyświetl komunikat „To weekend!”, w przeciwnym razie podaj, ile dni zostało do najbliższego weekendu.

Zadanie 6 – polskie święta
Użyj modułu holidays dla Polski.
Poproś użytkownika o datę i sprawdź, czy tego dnia jest święto ustawowo wolne od pracy.
Jeżeli tak – wyświetl nazwę święta.
Jeżeli nie – poinformuj, że to zwykły dzień roboczy.

Zachęcam do dzielnia się uwagami, pytaniami, problemami w komentarzach pod postem 😉

Ten wpis jest częścią cyklu Python kurs od podstaw:
Python kurs od podstaw