Извлечение дня, месяца, года и других составляющих даты в 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'))       # 359

Python вывести год (вывод текущего года в 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.

Компоненты даты - comments

En
Python date day (python)