Получение дня недели из даты в Python: методы weekday, strftime и calendar

0
10

Краткая памятка по получению дня недели в Python

  1. Импортируйте модуль datetime: from datetime import datetime
  2. Создайте объект даты: date_obj = datetime(2023, 10, 5)
  3. Используйте weekday() для числового значения (0-6)
  4. Используйте strftime(‘%A’) для текстового названия
  5. Для ввода от пользователя применяйте strptime()
  6. Установите локаль для названий на другом языке: import locale; locale.setlocale(locale.LC_TIME, ‘ru_RU’)
  7. Рассмотрите модуль calendar как альтернативу
  8. Обрабатывайте исключения при неверном формате даты
  9. Для текущей даты используйте datetime.now()
  10. Помните, что weekday() считает понедельник за 0
  11. Проверяйте корректность введенных данных
  12. Используйте isoweekday() для стандарта ISO (1-7)

Основы работы с датами в Python

Урок 22 - изображение номер один
Урок 22 — изображение номер один

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

Получение дня недели по дате в Python: обзор задачи

How to get day of week for a specific date in - изображение номер два
How to get day of week for a specific date in — изображение номер два

Задача определения дня недели по заданной дате возникает при решении множества практических задач: планировании бизнес-процессов, автоматизации расписаний, анализе данных и построении прогнозных моделей. Python предлагает разработчику несколько вариантов для её решения, от встроенных модулей до специализированных сторонних библиотек.

Представим сценарий: необходимо автоматически распределять задачи между сотрудниками в зависимости от дня недели. Или другой вариант: анализируем продажи интернет-магазина и хотим установить, в какие дни недели наблюдается пик активности. В этих и множестве других случаев требуется преобразовать дату в день недели.

Для решения задачи определения дня недели в Python существует несколько подходов:

  • Использование встроенного модуля datetime и его метода weekday()
  • Применение функций из модуля calendar
  • Форматирование даты через strftime() для получения текстового представления
  • Использование сторонних библиотек, таких как pandas или arrow
  • Ручное вычисление с помощью алгоритмов (например, алгоритм Зеллера)

Каждый из этих методов имеет свои преимущества и ограничения, которые мы рассмотрим в следующих разделах. Выбор конкретного подхода зависит от ваших требований к производительности, читаемости кода и формату представления результата. 🔍

How to subtract days from current date in - изображение номер три
How to subtract days from current date in — изображение номер три

Как в python определить день недели? - изображение номер четыре
Как в python определить день недели? — изображение номер четыре

Как получить день недели в Python

Работа с датой и временем в - изображение номер пять
Работа с датой и временем в — изображение номер пять

Теперь, когда мы рассмотрели основы работы с датами в Python, давайте перейдем к определению дня недели. Мы рассмотрим два метода: strftime и weekday.

Методы получения дня недели: strftime и weekday

Date, time and datetime classes in - изображение номер шесть
Date, time and datetime classes in — изображение номер шесть

Метод strftime позволяет форматировать дату и время в любую строку, тогда как weekday возвращает индекс дня недели (0 — понедельник, 6 — воскресенье).

Метод (): числовое представление дня недели

Getting week number from a given date in - изображение номер семь
Getting week number from a given date in — изображение номер семь

Модуль datetime — это базовый инструмент Python для работы с датами и временем. Метод weekday() объекта datetime предоставляет простой и эффективный способ получить числовое представление дня недели.

Важно понимать, что weekday() возвращает число от 0 до 6, где 0 соответствует понедельнику, а 6 — воскресенью. Это соответствует международному стандарту ISO, но может отличаться от локальных конвенций в некоторых странах.

from datetime import datetime # Создаем объект datetime для конкретной даты date = datetime(2026, 10, 15) # 15 октября 2026 года # Получаем день недели как число weekday_number = () print(f»День недели для {(‘%Y-%m-%d’)}: {weekday_number}») # Вывод: День недели для 2026-10-15: 6

from datetime import datetime # Получаем текущую дату и время now = () # Получаем день недели weekday_number = () print(f»Сегодня день недели с номером: {weekday_number}»)

Для преобразования числового представления в понятное название дня недели можно использовать список:

weekdays = [«Понедельник», «Вторник», «Среда», «Четверг», «Пятница», «Суббота», «Воскресенье»] date = datetime(2026, 10, 15) weekday_number = () print(f»{(‘%Y-%m-%d’)} — это {weekdays[weekday_number]}») # Вывод: 2026-10-15 — это Воскресенье

Существует также метод isoweekday(), который возвращает значения от 1 (понедельник) до 7 (воскресенье), что может быть более интуитивно для некоторых пользователей:

Таблица №1

Метод Диапазон значений Понедельник Воскресенье Соответствие стандарту
weekday() 0-6 0 6 ISO 8601
isoweekday() 1-7 1 7 ISO 8601
  • Входит в стандартную библиотеку Python, не требует установки дополнительных пакетов
  • Высокая производительность и оптимизация
  • Простота использования
  • Надёжность и предсказуемость результатов
  • Возвращает только числовое представление
  • Для получения текстового названия требуется дополнительный код
  • Может потребоваться преобразование для совместимости с другими системами, где воскресенье считается первым днем недели (например, в американском формате)

Метод weekday() — это фундаментальный инструмент, который стоит использовать, когда требуется простой и быстрый способ получения дня недели, особенно если вам нужно числовое представление для дальнейших вычислений или сравнений. ⏱️

Использование calendar для определения дня недели в Python

Работа с - изображение номер восемь
Работа с — изображение номер восемь

Основная функция, которую мы будем использовать — weekday(year, month, day). Она принимает три аргумента: год, месяц и день, и возвращает день недели в виде числа от 0 до 6, где 0 — понедельник, а 6 — воскресенье (аналогично методу weekday() из модуля datetime).

import calendar # Определяем день недели для 15 октября 2026 года year = 2026 month = 10 day = 15 weekday_number = (year, month, day) print(f»День недели для {year}-{month}-{day}: {weekday_number}») # Вывод: День недели для 2026-10-15: 6

Как и в случае с datetime, для получения текстового представления дня недели можно использовать список названий:

import calendar year = 2026 month = 10 day = 15 weekday_number = (year, month, day) weekdays = [«Понедельник», «Вторник», «Среда», «Четверг», «Пятница», «Суббота», «Воскресенье»] print(f»{year}-{month}-{day} — это {weekdays[weekday_number]}») # Вывод: 2026-10-15 — это Воскресенье

Модуль calendar также предоставляет встроенные константы для дней недели, которые можно использовать для повышения читаемости кода:

ЧИТАТЬ ТАКЖЕ:  Подсчет количества вхождений элемента в список Python: методы count, цикл for, len, sum и reduce

import calendar year = 2026 month = 10 first_weekday, days_in_month = (year, month) print(f»Первый день месяца {year}-{month} выпадает на день недели с номером: {first_weekday}») print(f»Количество дней в месяце: {days_in_month}») # Вывод: # Первый день месяца 2026-10 выпадает на день недели с номером: 6 # Количество дней в месяце: 31

Одно из преимуществ модуля calendar — возможность настройки начала недели:

import calendar # По умолчанию первый день недели – понедельник (0) () # Устанавливаем воскресенье как первый день недели # Теперь при использовании функций модуля, воскресенье будет иметь индекс 0 weekday_number = (2026, 10, 15) print(f»День недели с настроенным первым днем недели: {weekday_number}»)

Изначально я использовал (), но для оптимизации скорости обработки перешёл на функцию (), которая работает напрямую с числовыми значениями года, месяца и дня без создания промежуточных объектов datetime. Это дало прирост производительности примерно на 15%.

Интересно, что результаты анализа показали чёткую закономерность: пятница была абсолютным лидером по крупным покупкам, за ней следовал понедельник. Банк использовал эти данные для настройки системы мониторинга подозрительной активности, так как транзакции в нетипичные дни с большей вероятностью могли оказаться мошенническими.

Таблица №2

Функция Назначение Формат входных данных Формат результата
(year, month, day) Получение дня недели по дате Три числа: год, месяц, день Число от 0 до 6 (пн-вс)
(year, month) Получение первого дня недели месяца и количества дней Два числа: год, месяц Кортеж (первый день, дней в месяце)
(weekday) Установка первого дня недели Число от 0 до 6 None (изменяет глобальную настройку)
name[weekdaynumber] Получение названия дня недели Число от 0 до 6 Строка с названием дня (на английском)

Модуль calendar предоставляет эффективные инструменты для работы с днями недели, особенно когда требуется выполнять дополнительные календарные вычисления или когда данные уже представлены в виде отдельных компонентов года, месяца и дня. Это делает его отличным выбором для обработки структурированных данных или интеграции с внешними системами. 📅

Получение текстового названия дня недели через strftime()

PYTHON - изображение номер девять
PYTHON — изображение номер девять

Для многих приложений числовое представление дня недели недостаточно информативно. В этих случаях потребуется получить текстовое название дня недели, которое будет понятно пользователям. Метод strftime() (string format time) предоставляет мощный инструмент для форматирования объектов даты и времени в строковое представление, включая названия дней недели.

Метод strftime() доступен как для объектов datetime, так и для объектов date. Он принимает строку формата, в которой специальные директивы (начинающиеся с символа %) заменяются соответствующими значениями.

Для получения дня недели в текстовом формате используются следующие директивы:

  • %a – сокращенное название дня недели (например, «Пн», «Вт»)
  • %A – полное название дня недели (например, «Понедельник», «Вторник»)
  • %w – день недели как число (0-6, где 0 – воскресенье)
  • %u – день недели как число (1-7, где 1 – понедельник)

from datetime import datetime # Создаем объект datetime для конкретной даты date = datetime(2026, 10, 15) # Получаем полное название дня недели full_name = («%A») print(f»Полное название дня недели: {full_name}») # Вывод: Полное название дня недели: Sunday # Получаем сокращенное название дня недели short_name = («%a») print(f»Сокращенное название дня недели: {short_name}») # Вывод: Сокращенное название дня недели: Sun # Получаем числовое представление (0-6, воскресенье – 0) weekday_number = («%w») print(f»Числовое представление дня недели (0-6): {weekday_number}») # Вывод: Числовое представление дня недели (0-6): 0 # Получаем числовое представление (1-7, понедельник – 1) iso_weekday = («%u») print(f»ISO числовое представление дня недели (1-7): {iso_weekday}») # Вывод: ISO числовое представление дня недели (1-7): 7

Обратите внимание, что названия дней недели выводятся на английском языке. Для получения локализованных названий на русском или другом языке необходимо использовать модуль locale:

import locale from datetime import datetime # Устанавливаем локаль для русского языка (locale.LC_TIME, ‘ru_RU.UTF-8’) # На Linux/MacOS # Для Windows может потребоваться другой формат, например: # (locale.LC_TIME, ‘Russian_Russia.1251’) date = datetime(2026, 10, 15) # Теперь названия дней недели будут на русском russian_full_name = («%A») russian_short_name = («%a») print(f»Полное название дня недели на русском: {russian_full_name}») print(f»Сокращенное название дня недели на русском: {russian_short_name}»)

Если установка локали не подходит для вашего приложения (например, требуется поддержка нескольких языков одновременно), можно создать собственные словари для перевода:

from datetime import datetime # Словари для перевода дней недели english_to_russian_full = { «Monday»: «Понедельник», «Tuesday»: «Вторник», «Wednesday»: «Среда», «Thursday»: «Четверг», «Friday»: «Пятница», «Saturday»: «Суббота», «Sunday»: «Воскресенье» } english_to_russian_short = { «Mon»: «Пн», «Tue»: «Вт», «Wed»: «Ср», «Thu»: «Чт», «Fri»: «Пт», «Sat»: «Сб», «Sun»: «Вс» } date = datetime(2026, 10, 15) # Получаем английское название и преобразуем в русское english_full_name = («%A») russian_full_name = english_to_russian_full.get(english_full_name, english_full_name) english_short_name = («%a») russian_short_name = english_to_russian_short.get(english_short_name, english_short_name) print(f»Полное название дня недели на русском: {russian_full_name}») print(f»Сокращенное название дня недели на русском: {russian_short_name}»)

Метод strftime() также позволяет создавать комплексные форматы, включающие день недели вместе с другой информацией о дате:

from datetime import datetime date = datetime(2026, 10, 15) # Создаем форматированную строку с днем недели и полной датой formatted_date = («%A, %d %B %Y») print(formatted_date) # Вывод: Sunday, 15 October 2026 # Более компактный формат compact_format = («%a, %d/%m/%Y») print(compact_format) # Вывод: Sun, 15/10/2026

  • Гибкость в форматировании и выводе информации
  • Возможность получения текстового представления дня недели
  • Встроенная поддержка локализации через модуль locale
  • Возможность комбинирования с другими элементами даты и времени
  • Зависимость от настроек локали для корректного отображения не английских названий
  • Возможные проблемы с кодировками при работе в разных операционных системах
  • Немного более низкая производительность по сравнению с числовыми методами

Метод strftime() — идеальный выбор для случаев, когда требуется представление дня недели в удобочитаемом формате, особенно в пользовательском интерфейсе или отчетах. 🔤

Альтернативные библиотеки для работы с днями недели в Python

Модуль datetime в - изображение номер десять
Модуль datetime в — изображение номер десять

Помимо стандартных модулей datetime и calendar, существует ряд сторонних библиотек, которые могут значительно упростить работу с днями недели и предоставить дополнительные функциональные возможности. Рассмотрим наиболее популярные и полезные из них.

ЧИТАТЬ ТАКЖЕ:  Python или PHP: что выбрать для проекта? Сравнение языков

Библиотека Pandas широко используется для анализа данных и предоставляет мощные инструменты для работы с временными рядами. Для определения дня недели по дате можно использовать функцию dt.day_name():

import pandas as pd # Создаем Series с датами dates = (pd.date_range(start=’2026-10-15′, periods=7)) # Получаем названия дней недели weekday_names =.day_name() print(weekday_names) «»» Вывод: 0 Sunday 1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 Saturday dtype: object «»» # Для получения номера дня недели используем weekday_numbers = print(weekday_numbers) «»» Вывод: 0 6 1 0 2 1 3 2 4 3 5 4 6 5 dtype: int64 «»»

import pandas as pd import locale # Устанавливаем русскую локаль (locale.LC_TIME, ‘ru_RU.UTF-8′) dates = (pd.date_range(start=’2026-10-15′, periods=7)) weekday_names_ru =.day_name(locale=’ru_RU.UTF-8’) print(weekday_names_ru)

Arrow — библиотека, предоставляющая более дружественный и интуитивный API для работы с датами и временем, чем стандартный datetime:

import arrow # Создаем объект Arrow для конкретной даты date = (‘2026-10-15’) # Получаем день недели как число (0-6, где 0 – понедельник) weekday_number = () print(f»День недели: {weekday_number}») # Вывод: День недели: 6 # Форматируем дату для получения названия дня недели weekday_name = (‘dddd’) print(f»Название дня недели: {weekday_name}») # Вывод: Название дня недели: Sunday # Arrow поддерживает локализацию date_ru = (‘2026-10-15’).to(‘Europe/Moscow’) weekday_name_ru = date_ru.format(‘dddd’, locale=’ru’) print(f»Название дня недели на русском: {weekday_name_ru}»)

Pendulum — современная альтернатива стандартной библиотеке datetime, с акцентом на удобство использования и выразительность:

import pendulum # Создаем объект Pendulum для конкретной даты date = (2026, 10, 15) # Получаем день недели как число (0-6, где 0 – воскресенье, как в стандартном (‘%w’)) weekday_number = date.day_of_week print(f»День недели: {weekday_number}») # Вывод: День недели: 0 (воскресенье) # Проверка на конкретный день недели is_weekend = date.is_weekend() print(f»Выходной день? {is_weekend}») # Вывод: Выходной день? True # Получаем название дня недели weekday_name = (‘dddd’) print(f»Название дня недели: {weekday_name}») # Вывод: Название дня недели: Sunday # Pendulum также поддерживает локализацию date_ru = (2026, 10, 15, tz=’Europe/Moscow’) weekday_name_ru = date_ru.format(‘dddd’, locale=’ru’) print(f»Название дня недели на русском: {weekday_name_ru}»)

Maya — это гуманизированная библиотека для работы с датами, которая делает код более читаемым и интуитивно понятным:

import maya # Создаем объект Maya для конкретной даты date = (‘2026-10-15’) # Преобразуем в стандартный datetime для получения дня недели dt = () weekday_number = () print(f»День недели: {weekday_number}») # Вывод: День недели: 6 # Maya предоставляет удобные методы для форматирования human_date = date.slang_date() print(f»Человекочитаемая дата: {human_date}»)

Delorean — библиотека, вдохновлённая одноименной машиной времени, которая упрощает работу с датами и временными зонами:

from delorean import Delorean # Создаем объект Delorean для конкретной даты date = Delorean(datetime=datetime(2026, 10, 15)) # Получаем стандартный datetime объект dt = weekday_number = () print(f»День недели: {weekday_number}») # Вывод: День недели: 6 # Delorean также поддерживает «перемещение» во времени next_day = date.next_day(1) print(f»Следующий день: {next_day.datetime}»)

Таблица №3

Библиотека Простота использования Производительность Локализация Дополнительные возможности Популярность
datetime/calendar (стандартные) Средняя Высокая Через locale Базовые Встроенные
Pandas Высокая Средняя Встроенная Анализ временных рядов Очень высокая
Arrow Высокая Средняя Встроенная Удобный API, работа с временными зонами Высокая
Pendulum Очень высокая Средняя Встроенная Интуитивный API, проверки дней недели Средняя
Maya Высокая Низкая Ограниченная Человекочитаемые форматы Низкая
Delorean Средняя Средняя Через datetime «Путешествия» во времени Низкая
  • Для анализа данных и работы с временными рядами оптимальным выбором будет Pandas
  • Для современной замены стандартной datetime с более удобным API подойдут Arrow или Pendulum
  • Для простых сценариев использования стандартные datetime и calendar вполне достаточны
  • Для проектов с акцентом на удобочитаемость и интуитивность можно рассмотреть Maya

Эти библиотеки существенно расширяют возможности Python для работы с днями недели, предоставляя более высокоуровневые абстракции и решая специфические задачи, которые могут быть сложными для реализации с использованием только стандартных библиотек. 🚀

Python предлагает богатый набор инструментов для работы с днями недели, от простых встроенных функций до мощных специализированных библиотек. Выбор оптимального метода зависит от специфики вашей задачи: нужна ли максимальная производительность, важна ли локализация, требуются ли дополнительные манипуляции с датами. Освоив эти инструменты, вы сможете элегантно решать широкий спектр задач — от простой классификации данных по дням недели до сложного временного анализа с учетом региональных особенностей. Главное помнить: правильно подобранный метод не только упрощает разработку, но и делает код более понятным и поддерживаемым.

Ввод и обработка данных от пользователя

How to - изображение номер одиннадцать
How to — изображение номер одиннадцать

На практике часто требуется вводить дату от пользователя. Для этого нужно реализовать систему, которая будет обрабатывать ввод в формате строки и корректно обрабатывать возможные ошибки.

Как реализовать ввод даты от пользователя

Python: datetime - изображение номер двенадцать
Python: datetime — изображение номер двенадцать

Мы будем использовать функцию strptime для преобразования строки в объект типа datetime. Также важно обрабатывать исключения, чтобы программа не завершалась при некорректном вводе.

Практическое применение: создание простого приложения

Модуль calendar python - изображение номер тринадцать
Модуль calendar python — изображение номер тринадцать

Теперь мы можем собрать все наши знания и создать простое приложение, которое будет запрашивать у пользователя дату и выводить день недели.

Идея приложения

Convert - изображение номер четырнадцать
Convert — изображение номер четырнадцать

Приложение будет запрашивать у пользователя ввод даты в формате YYYY-MM-DD, обрабатывать ввод и выводить соответствующий день недели.

Возможные применения

Рассмотренные приемы можно использовать для создания различных приложений: автоматизация отчетов, обработка логов, планирование задач и много другое.

Часто задаваемые вопросы о получении дня недели из даты в Python

Вопрос: Какой метод лучше использовать для получения дня недели в Python?
Ответ: Выбор зависит от задачи: weekday() возвращает число (0-6), а strftime() — текстовое название.

Вопрос: Как получить день недели в виде строки на русском языке?
Ответ: Используйте strftime(‘%A’) с установленной локалью ‘ru_RU.UTF-8’.

Вопрос: Какой модуль отвечает за работу с датами в Python?
Ответ: Основной модуль — datetime, также можно использовать calendar.

Вопрос: Как получить день недели из строки с датой?
Ответ: Сначала преобразуйте строку в объект datetime с помощью strptime(), затем примените weekday() или strftime().

Вопрос: Что возвращает метод weekday()?
Ответ: Целое число: 0 — понедельник, 1 — вторник,…, 6 — воскресенье.

Вопрос: Как получить день недели из текущей даты?
Ответ: Используйте datetime.now().weekday() или datetime.now().strftime(‘%A’).

Вопрос: Можно ли получить день недели без использования datetime?
Ответ: Да, с помощью модуля calendar: calendar.weekday(year, month, day).

Вопрос: Какой формат у strftime для полного названия дня недели?
Ответ: ‘%A’ — полное название (например, Monday), ‘%a’ — сокращенное (Mon).

Вопрос: Как обработать ввод даты от пользователя в консоли?
Ответ: Используйте input() и datetime.strptime(input_string, ‘%Y-%m-%d’).

Вопрос: Что делать, если дата введена в неверном формате?
Ответ: Обработайте исключение ValueError и запросите повторный ввод.