Извлечение дня, месяца, года и других составляющих даты в Python
Основы извлечения компонентов даты в Python
Для работы с датами в Python используется модуль datetime. Он предоставляет объекты date, datetime, time и timedelta. Компоненты даты (день, месяц, год, день недели, день года) можно получить разными способами в зависимости от задачи.
Как получить день, месяц и год из объекта date?
Самый прямой способ - обратиться к атрибутам объекта date или datetime:
from datetime import date, datetime
today = date.today()
print(today.day, today.month, today.year)
now = datetime.now()
print(now.day, now.month, now.year)Python date day (компоненты даты)
Результат:
25 12 2025 25 12 2025
Python datetime date (модуль datetime)
Эти атрибуты доступны только для чтения и возвращают целые числа. Цель: базовая работа с компонентами - формирование отчётов, фильтрация данных.
today.day = 1) вызывает исключение AttributeError. Для изменения даты используйте replace() или timedelta.Как получить день недели в виде числа или названия?
Метод weekday() возвращает номер дня недели (понедельник = 0, воскресенье = 6). Метод isoweekday() - по ISO (понедельник = 1, воскресенье = 7).
d = date(2025, 12, 25)
print(d.weekday()) # 3 - четверг
print(d.isoweekday()) # 4 - четверг по ISO
# Для названия используем calendar или strftime:
import calendar
print(calendar.day_name[d.weekday()]) # Thursday
Python string to date (преобразование строки в дату)
Результат:
3 4 Thursday
Python вывести время (вывод текущего времени в python)
weekday() и isoweekday(): если нужно соответствие ISO 8601 (например, для бизнес-логики), используйте isoweekday().Как получить номер дня в году?
Используйте timetuple().tm_yday или strftime('%j'):
dt = datetime(2025, 12, 25)
print(dt.timetuple().tm_yday) # 359
print(dt.strftime('%j')) # 359Python вывести год (вывод текущего года в python)
Результат:
359 359
Python вывести дату (вывести дату в python)
Как извлечь компоненты из строки с датой?
С помощью strptime создаём объект datetime, затем берём нужные атрибуты:
date_str = "25.12.2025"
dt = datetime.strptime(date_str, "%d.%m.%Y")
print(dt.day, dt.month, dt.year)Python разница времени (вычисление разницы между датами и временем в python)
Результат: 25 12 2025.
"1.1.2025" при шаблоне "%d.%m.%Y") вызовет ValueError. Используйте dateutil.parser для гибкого парсинга.Как определить високосный год и количество дней в месяце?
Модуль calendar даёт простые функции:
import calendar
print(calendar.isleap(2024)) # True
print(calendar.monthrange(2025, 2)) # (5, 28) – день недели 1-го числа и количество днейPython текущая дата и время (получение текущей даты и времени в python)
Результат: True
(5, 28).
Цель: проверка корректности дат, расчёт количества рабочих дней.
Как работать с компонентами даты в Pandas?
Для серий дат используйте dt-аксессор:
import pandas as pd
dates = pd.Series(pd.to_datetime(['2025-12-25', '2026-01-01']))
print(dates.dt.day)
print(dates.dt.month_name())Результат:
0 25 1 1 dtype: int64 0 December 1 January dtype: object
NaT (Not a Time), операции с .dt вернут ошибку. Предварительно заполняйте или удаляйте пропуски.Расширенные примеры работы с компонентами даты
Получение всех компонентов из timestamp
from datetime import datetime
import time
ts = time.time()
dt = datetime.fromtimestamp(ts)
print(f"Год: {dt.year}, Месяц: {dt.month}, День: {dt.day}")
print(f"Часы: {dt.hour}, Минуты: {dt.minute}, Секунды: {dt.second}")
print(f"День недели (0-6): {dt.weekday()}")
print(f"День года: {dt.timetuple().tm_yday}")Результат (пример):
Год: 2025, Месяц: 12, День: 25 Часы: 10, Минуты: 30, Секунды: 15 День недели (0-6): 3 День года: 359
Вычисление возраста по дате рождения
from datetime import date
def age(birth_date):
today = date.today()
return today.year - birth_date.year - ((today.month, today.day) < (birth_date.month, birth_date.day))
print(age(date(1990, 6, 15))) # 35 (если сегодня 25.12.2025)Результат: 35.
Пояснение: сравнение кортежей (month, day) позволяет учесть, был ли уже день рождения в текущем году.
Работа с компонентами при сдвиге даты
from datetime import date, timedelta
d = date(2025, 12, 25)
print(f"Исходная дата: {d}")
d_next = d + timedelta(days=7)
print(f"Через неделю: {d_next}")
print(f"День недели исходной: {d.weekday()}, новой: {d_next.weekday()}")Результат:
Исходная дата: 2025-12-25 Через неделю: 2026-01-01 День недели исходной: 3, новой: 3
Обратите внимание: при пересечении границы года все компоненты (год, месяц, день) обновились автоматически.
Получение номера недели по ISO
from datetime import date
d = date(2025, 12, 25)
iso_cal = d.isocalendar()
print(f"Год по ISO: {iso_cal[0]}, неделя: {iso_cal[1]}, день недели: {iso_cal[2]}")Результат: Год по ISO: 2025, неделя: 52, день недели: 4.
Цель: отчётность по неделям, планирование.
Обработка некорректных строк с dateutil
from dateutil import parser
dates_str = ["25.12.2025", "2025-12-25", "Dec 25, 2025", "25 декабря 2025"]
for s in dates_str:
try:
dt = parser.parse(s, dayfirst=True)
print(f"{s} -> {dt.day}.{dt.month}.{dt.year}")
except Exception as e:
print(f"Ошибка: {e}")Результат:
25.12.2025 -> 25.12.2025 2025-12-25 -> 25.12.2025 Dec 25, 2025 -> 25.12.2025 25 декабря 2025 -> 25.12.2025
Параметр dayfirst=True помогает интерпретировать день перед месяцем, но не всегда надёжен. Рекомендуется передавать явный формат, если это возможно.
Проверка, является ли дата выходным
from datetime import date
import calendar
def is_weekend(d):
return d.weekday() >= 5 # суббота=5, воскресенье=6
d1 = date(2025, 12, 25) # четверг
d2 = date(2025, 12, 27) # суббота
print(is_weekend(d1), is_weekend(d2)) # False TrueРезультат: False True.
Для более сложных правил (учёт праздников) используйте библиотеку holidays.