Уроки модуля (2/4)
datetime: даты и время
Модуль datetime предоставляет классы для представления дат и времени.
Три основных класса
date— только дата (год, месяц, день)time— только время (час, минута, секунда, микросекунда)datetime— дата + время вместеtimedelta— длительность (разница между двумя моментами)
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
datetime.now() # current date + time
date.today() # current date onlyАрифметика с timedelta
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.0timedelta принимает days, seconds, microseconds, milliseconds,
minutes, hours, weeks (НЕ months или years, которые неоднозначны).
Форматирование: strftime
Преобразует дату и время → строку по шаблону.
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
Обратное: строка → дата-время, учитывая ожидаемый шаблон.
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)ИСО 8601
Для обмена данными всегда предпочитайте формат ISO 8601 (YYYY-MM-DDTHH:MM:SS):
ora.isoformat() # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")Часовые пояса и осведомленные даты и время
По умолчанию объекты datetime в Python являются наивными (то есть они не содержат информации о часовом поясе). Для реальных приложений лучше всего сделать их уведомленными, установив информацию о часовом поясе через datetime.timezone.utc или используя модуль zoneinfo.
Попробуйте это
Вычислите дату через 30 дней после 1 января 2025 года и отформатируйте ее как «ГГГГ-ММ-ДД» в переменной «date_str». Оцените `date_str`.
Показать подсказку
база + timedelta(дней=30), затем .strftime
Решение доступно после 3 попыток
Обзор упражнения
Учитывая строку `s = '15/03/2025'`, проанализируйте ее с помощью strptime и преобразуйте в переменную `d` (объект datetime). Оцените целый день недели `d.weekday()` (0=понедельник, 6=воскресенье).
Показать подсказку
strptime с шаблоном итальянского формата.
Решение доступно после 3 попыток
Дополнительная задача
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 попыток