Перейти к основному содержимому
Модуль 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

Преобразует дату и время → строку по шаблону.

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)

ИСО 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`.

Загрузка редактора…
Показать подсказку

база + 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 попыток