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

Модуль datetime в Python: работа с датами и временем, timedelta, форматирование strftime и разбор strptime.

Модуль datetime из стандартной библиотеки предоставляет типы для работы с датами и временем. Самые нужные: date, time, datetime и timedelta.

Текущая дата и время

from datetime import datetime, date

today = date.today()
now = datetime.now()

print(today)       # 2024-06-05
print(now)         # 2024-06-05 14:23:10.123456
print(now.year, now.month, now.day)
print(now.hour, now.minute, now.second)

Вывод:

2024-06-05
2024-06-05 14:23:10.123456
2024 6 5
14 23 10

Создание конкретной даты

from datetime import date, datetime

birthday = date(1995, 8, 15)
meeting = datetime(2024, 12, 31, 9, 0, 0)

print(birthday)
print(meeting)
print(birthday.weekday())   # 0=Пн ... 6=Вс

Вывод:

1995-08-15
2024-12-31 09:00:00
1

timedelta — разница и сдвиг дат

from datetime import date, timedelta

today = date.today()
in_30_days = today + timedelta(days=30)
yesterday = today - timedelta(days=1)

print("Сегодня:", today)
print("Через 30 дней:", in_30_days)
print("Вчера:", yesterday)

# Разница между датами
d1 = date(2024, 1, 1)
d2 = date(2024, 6, 5)
delta = d2 - d1
print(f"Дней прошло: {delta.days}")

Вывод:

Сегодня: 2024-06-05
Через 30 дней: 2024-07-05
Вчера: 2024-06-04
Дней прошло: 156

strftime — форматирование в строку

Метод strftime преобразует дату в строку по формату:

from datetime import datetime

now = datetime(2024, 6, 5, 14, 30, 0)

print(now.strftime("%d.%m.%Y"))           # 05.06.2024
print(now.strftime("%Y-%m-%dT%H:%M:%S")) # 2024-06-05T14:30:00
print(now.strftime("%A, %d %B %Y"))       # Wednesday, 05 June 2024

Вывод:

05.06.2024
2024-06-05T14:30:00
Wednesday, 05 June 2024

Код

Значение

Пример

%Y

год 4 цифры

2024

%m

месяц 01-12

06

%d

день 01-31

05

%H

часы 00-23

14

%M

минуты 00-59

30

%S

секунды 00-59

00

strptime — разбор строки в дату

from datetime import datetime

raw = "05.06.2024 14:30"
dt = datetime.strptime(raw, "%d.%m.%Y %H:%M")

print(dt)
print(type(dt))
print(dt.year, dt.month)

Вывод:

2024-06-05 14:30:00
<class 'datetime.datetime'>
2024 6

Запомните мнемонику: strftime = «format time» (дата → строка); strptime = «parse time» (строка → дата).

Коротко

  • date.today() — сегодняшняя дата; datetime.now() — текущие дата и время.
  • timedelta(days=N) — смещение; прибавляется/вычитается из дат арифметическими операторами.
  • strftime(format) — дата в строку; datetime.strptime(s, format) — строка в дату.
  • Разница двух дат даёт timedelta; количество дней — через атрибут .days.
Проверьте себя
1. Как получить текущую дату (без времени) в Python?
Adatetime.now()
Bdate.today()
Cdatetime.today()
Dtime.now()
2. Что нужно прибавить к дате, чтобы получить дату через 7 дней?
Adate + 7
Bdate.add(days=7)
Cdate + timedelta(days=7)
Ddate.shift(7)
3. Какой метод преобразует строку "2024-06-05" в объект datetime?
Adatetime.parse("2024-06-05", "%Y-%m-%d")
Bdatetime.strptime("2024-06-05", "%Y-%m-%d")
Cdatetime.strftime("2024-06-05", "%Y-%m-%d")
Ddatetime.fromstring("2024-06-05")

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект