Модуль 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 — инструментами для работы с итерируемыми последовательностями.