Содержание
Краткая памятка по получению дня недели в Python
- Импортируйте модуль datetime: from datetime import datetime
- Создайте объект даты: date_obj = datetime(2023, 10, 5)
- Используйте weekday() для числового значения (0-6)
- Используйте strftime(‘%A’) для текстового названия
- Для ввода от пользователя применяйте strptime()
- Установите локаль для названий на другом языке: import locale; locale.setlocale(locale.LC_TIME, ‘ru_RU’)
- Рассмотрите модуль calendar как альтернативу
- Обрабатывайте исключения при неверном формате даты
- Для текущей даты используйте datetime.now()
- Помните, что weekday() считает понедельник за 0
- Проверяйте корректность введенных данных
- Используйте isoweekday() для стандарта ISO (1-7)
Основы работы с датами в Python
Модуль datetime является стандартным модулем Python для работы с датами и временем. Он предоставляет множество возможностей для создания и манипуляции объектами типа date, time, datetime и timedelta.
Получение дня недели по дате в Python: обзор задачи
Задача определения дня недели по заданной дате возникает при решении множества практических задач: планировании бизнес-процессов, автоматизации расписаний, анализе данных и построении прогнозных моделей. Python предлагает разработчику несколько вариантов для её решения, от встроенных модулей до специализированных сторонних библиотек.
Представим сценарий: необходимо автоматически распределять задачи между сотрудниками в зависимости от дня недели. Или другой вариант: анализируем продажи интернет-магазина и хотим установить, в какие дни недели наблюдается пик активности. В этих и множестве других случаев требуется преобразовать дату в день недели.
Для решения задачи определения дня недели в Python существует несколько подходов:
- Использование встроенного модуля datetime и его метода weekday()
- Применение функций из модуля calendar
- Форматирование даты через strftime() для получения текстового представления
- Использование сторонних библиотек, таких как pandas или arrow
- Ручное вычисление с помощью алгоритмов (например, алгоритм Зеллера)
Каждый из этих методов имеет свои преимущества и ограничения, которые мы рассмотрим в следующих разделах. Выбор конкретного подхода зависит от ваших требований к производительности, читаемости кода и формату представления результата. 🔍
Как получить день недели в Python
Теперь, когда мы рассмотрели основы работы с датами в Python, давайте перейдем к определению дня недели. Мы рассмотрим два метода: strftime и weekday.
Методы получения дня недели: strftime и weekday
Метод strftime позволяет форматировать дату и время в любую строку, тогда как weekday возвращает индекс дня недели (0 — понедельник, 6 — воскресенье).
Метод (): числовое представление дня недели
Модуль 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 также предоставляет встроенные константы для дней недели, которые можно использовать для повышения читаемости кода:
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()
Для многих приложений числовое представление дня недели недостаточно информативно. В этих случаях потребуется получить текстовое название дня недели, которое будет понятно пользователям. Метод 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 и calendar, существует ряд сторонних библиотек, которые могут значительно упростить работу с днями недели и предоставить дополнительные функциональные возможности. Рассмотрим наиболее популярные и полезные из них.
Библиотека 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 предлагает богатый набор инструментов для работы с днями недели, от простых встроенных функций до мощных специализированных библиотек. Выбор оптимального метода зависит от специфики вашей задачи: нужна ли максимальная производительность, важна ли локализация, требуются ли дополнительные манипуляции с датами. Освоив эти инструменты, вы сможете элегантно решать широкий спектр задач — от простой классификации данных по дням недели до сложного временного анализа с учетом региональных особенностей. Главное помнить: правильно подобранный метод не только упрощает разработку, но и делает код более понятным и поддерживаемым.
Ввод и обработка данных от пользователя
На практике часто требуется вводить дату от пользователя. Для этого нужно реализовать систему, которая будет обрабатывать ввод в формате строки и корректно обрабатывать возможные ошибки.
Как реализовать ввод даты от пользователя
Мы будем использовать функцию strptime для преобразования строки в объект типа datetime. Также важно обрабатывать исключения, чтобы программа не завершалась при некорректном вводе.
Практическое применение: создание простого приложения
Теперь мы можем собрать все наши знания и создать простое приложение, которое будет запрашивать у пользователя дату и выводить день недели.
Идея приложения
Приложение будет запрашивать у пользователя ввод даты в формате 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 и запросите повторный ввод.




















