Дата и время: модуль 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
Код | Значение | Пример |
| год 4 цифры | 2024 |
| месяц 01-12 | 06 |
| день 01-31 | 05 |
| часы 00-23 | 14 |
| минуты 00-59 | 30 |
| секунды 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")
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.