Модуль datetime: дата и время

Модуль datetime: дата и время

Работа с датами и временем встречается повсюду: логи, сроки задач, расчёт возраста, разница между событиями. Модуль datetime из стандартной библиотеки Python предоставляет удобные типы для всего этого.

Основные классы

Модуль datetime содержит несколько классов с похожими именами. Самые используемые:

  • datetime.date — только дата (год, месяц, день)
  • datetime.time — только время (часы, минуты, секунды)
  • datetime.datetime — дата и время вместе
  • datetime.timedelta — временной интервал (разница между датами)

Обычно импортируют так:

from datetime import date, datetime, timedelta

Работа с датой: date

from datetime import date

today = date.today()
print(today)              # 2025-04-29
print(today.year)         # 2025
print(today.month)        # 4
print(today.day)          # 29

birthday = date(1990, 7, 15)
print(birthday)           # 1990-07-15

# Разница между датами — это timedelta:
delta = today - birthday
print(delta.days)         # количество дней

Работа с датой и временем: datetime

from datetime import datetime

now = datetime.now()
print(now)               # 2025-04-29 14:32:10.123456
print(now.hour)          # 14
print(now.minute)        # 32

# Создать конкретный момент:
event = datetime(2025, 12, 31, 23, 59, 59)
print(event)             # 2025-12-31 23:59:59

timedelta — интервалы

timedelta представляет продолжительность: разницу между двумя моментами времени или смещение:

from datetime import date, timedelta

today = date.today()

week_later = today + timedelta(weeks=1)
yesterday = today - timedelta(days=1)

print(f"Сегодня: {today}")
print(f"Через неделю: {week_later}")
print(f"Вчера: {yesterday}")

# Разница между датами:
start = date(2025, 1, 1)
end = date(2025, 4, 29)
delta = end - start
print(f"Дней в 2025 году до 29 апреля: {delta.days}")   # 118

Форматирование: strftime и strptime

strftime — конвертация datetime в строку по шаблону. strptime — обратно, строка → datetime:

from datetime import datetime

now = datetime.now()

# Форматирование (format):
print(now.strftime("%d.%m.%Y"))           # 29.04.2025
print(now.strftime("%H:%M:%S"))           # 14:32:10
print(now.strftime("%d %B %Y, %A"))       # 29 April 2025, Tuesday

# Парсинг строки (parse):
s = "2025-12-31"
d = datetime.strptime(s, "%Y-%m-%d")
print(d)          # 2025-12-31 00:00:00
print(type(d))    # <class 'datetime.datetime'>

Основные форматные коды: %Y — год (4 цифры), %m — месяц, %d — день, %H — часы (24ч), %M — минуты, %S — секунды.

Практический пример: возраст

from datetime import date

def calculate_age(birth_date):
    today = date.today()
    years = today.year - birth_date.year
    # Если день рождения ещё не наступил в этом году — уменьшить на 1:
    if (today.month, today.day) < (birth_date.month, birth_date.day):
        years -= 1
    return years

born = date(1990, 7, 15)
print(f"Возраст: {calculate_age(born)} лет")

Проверь себя

Что вернёт следующее выражение?

from datetime import date, timedelta
d = date(2025, 1, 31) + timedelta(days=1)
print(d)

date(2025, 1, 31) — 31 января. + timedelta(days=1) → 1 февраля 2025. Вывод: 2025-02-01.

Итог

  • date.today() — сегодняшняя дата; datetime.now() — текущая дата и время.
  • Атрибуты: .year, .month, .day, .hour, .minute, .second.
  • timedelta(days=n, weeks=n) — интервал; можно складывать и вычитать с датами.
  • strftime(fmt) — datetime → строка; strptime(s, fmt) — строка → datetime.

В следующем уроке познакомимся с модулем itertools — инструментами для работы с итерируемыми последовательностями.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике