Перейти до основного вмісту
Модуль 8 · Урок 2 із 430/36 у курсі~12 min
Модульні уроки (2/4)

datetime: дати та час

Модуль datetime надає класи для представлення дат і часу.

Три основні класи

  • date — лише дата (рік, місяць, число)
  • time — лише час (година, хвилина, секунда, мікросекунда)
  • datetime — дата + час разом
  • timedelta — тривалість (різниця між двома моментами)
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)

"Зараз": now та today

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

Арифметика з 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

timedelta приймає days, seconds, microseconds, milliseconds, minutes, hours, weeks (НЕ months або years, які є двозначними).

Форматування: strftime

Перетворює datetime → рядок відповідно до шаблону.

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)

Найчастіше використовувані директиви: %Y 4-значний рік, %m 2-значний місяць, %d 2-значний день, %H 24 години, %M хвилин, %S секунд.

Розбір: strptime

Протилежне: рядок → дата-час, враховуючи очікуваний шаблон.

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

ISO 8601

Для обміну даними завжди віддавайте перевагу формату ISO 8601 (YYYY-MM-DDTHH:MM:SS):

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

Часові пояси та відомості про дату та час

За замовчуванням об’єкти datetime в Python наївні (це означає, що вони не містять інформації про часовий пояс). Для реальних додатків найкраще усвідомлювати їх, встановивши інформацію про часовий пояс за допомогою datetime.timezone.utc або використовуючи модуль zoneinfo.

Спробуйте

вправи#python.m8.l2.e1
Спроби: 0Завантаження…

Обчисліть дату через 30 днів після 1 січня 2025 року та відформатуйте її як «РРРР-ММ-ДД» у змінній `date_str`. Оцініть `date_str`.

Завантаження редактора…
Показати підказку

base + timedelta(дні=30), потім .strftime

Рішення доступне після 3 спроб

Повторна вправа

вправи#python.m8.l2.e2
Спроби: 0Завантаження…

Враховуючи рядок `s = '15/03/2025'`, проаналізуйте його за допомогою strptime у змінну `d` (об'єкт datetime). Обчисліть цілий день тижня `d.weekday()` (0=Пн, 6=Нд).

Завантаження редактора…
Показати підказку

strptime із шаблоном італійського формату.

Рішення доступне після 3 спроб

Додатковий виклик

вправи#python.m8.l2.e3
Спроби: 0Завантаження…

Import `date` from the `datetime` module. Calculate the difference in days between December 25, 2026 (`date(2026, 12, 25)`) and December 20, 2026 (`date(2026, 12, 20)`). Store the integer number of days (using the `.days` attribute of the delta) in `days_diff`. Finally, evaluate the variable.

Завантаження редактора…
Показати підказку

The difference between two dates returns a timedelta. Access the integer days with delta.days.

Рішення доступне після 3 спроб