Какой день недели был 9 мая 1945 года и как узнать день недели любой даты

9 мая 1945 года была среда. Показываем, как узнать день недели любой даты: на Python, функцией ДЕНЬНЕД в Excel, в уме по кодам месяцев и по формуле Зеллера.

Отдельно разбираем даты по старому стилю и то, почему их нельзя подставлять в расчёт как есть.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3090 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3744 экспертных мнения Подписаться на Телеграм-канал
Обложка: Какой день недели был 9 мая 1945 года и как узнать день недели любой даты

9 мая 1945 года была среда. Проверить это, как и день недели любой другой даты, можно тремя способами: на Python, функцией ДЕНЬНЕД в Excel или в уме, если запомнить двенадцать кодов месяцев.

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

CheckroiCheckroiПодборка курсов по Python568 курсов • 51 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Какой день недели был 9 мая 1945 года

Рой листает настенный календарь и показывает на среду 9 мая 1945 года

Среда. Вот как выглядел май 1945 года в календаре, который печатает Python:

      мая 1945
пн вт ср чт пт сб вс
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

Дни недели других памятных дат:

Дата День недели
22 июня 1941 года воскресенье
9 мая 1945 года среда
12 апреля 1961 года среда
26 декабря 1991 года четверг
1 января 2000 года суббота

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

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

В стандартной библиотеке Python для этого есть модуль datetime, ничего устанавливать не нужно. Порядок такой:

  1. Создайте файл с расширением .py и откройте его в редакторе. Как это сделать в VS Code, показано в инструкции по запуску файла Python.
  2. Импортируйте класс date и создайте дату: год, месяц, число.
  3. Вызовите метод weekday() или isoweekday().
from datetime import date

d = date(1945, 5, 9)
print(d.weekday())      # 0 — понедельник, 6 — воскресенье
print(d.isoweekday())   # 1 — понедельник, 7 — воскресенье
2
3

Нумерация описана в документации Python: у weekday() понедельник равен 0, у isoweekday() он равен 1. Эти два метода путают чаще всего, об этой ошибке ещё скажем в конце.

Как вывести название дня, а не номер

Проще всего завести список из семи названий и взять из него элемент по номеру:

from datetime import date

DAYS = ["понедельник", "вторник", "среда", "четверг",
        "пятница", "суббота", "воскресенье"]

d = date(1945, 5, 9)
print(DAYS[d.weekday()])
среда

Если нужна строка вроде «9 мая 1945 года, среда», соберите её через f-строку: f"{d.day} мая {d.year} года, {DAYS[d.weekday()]}".

Как напечатать календарь на месяц

Календарь из первого раздела печатает модуль calendar. Чтобы дни недели были по-русски, нужен класс LocaleTextCalendar с русской локалью:

import calendar

cal = calendar.LocaleTextCalendar(locale="ru_RU.UTF-8")
cal.prmonth(1945, 5)

Если такой локали в системе нет, Python остановится с ошибкой locale.Error: unsupported locale setting. Тогда берите обычный calendar.prmonth(1945, 5): календарь будет тот же, только с английскими сокращениями Mo, Tu, We.

Какой день был 5 дней или 2 недели назад

Для сдвига на N дней есть timedelta. Возьмём для примера 29 октября 2026 года:

from datetime import date, timedelta

today = date(2026, 10, 29)
DAYS = ["понедельник", "вторник", "среда", "четверг",
        "пятница", "суббота", "воскресенье"]

for shift in (5, 14):
    d = today - timedelta(days=shift)
    print(shift, d.strftime("%d.%m.%Y"), DAYS[d.weekday()])
5 24.10.2026 суббота
14 15.10.2026 четверг

Чтобы считать от сегодняшнего дня, замените первую строку на today = date.today(). Две недели назад всегда тот же день недели, что и сегодня: 14 делится на 7 без остатка.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Как определить день недели в уме

Шестерёнки с номерами месяцев и днями недели складываются в один ответ

Без компьютера день недели считают по кодам. Складываете число, код месяца, код века, две последние цифры года и четверть от них, а потом берёте остаток от деления на 7.

Коды месяцев придётся выучить, их двенадцать:

Янв Фев Мар Апр Май Июн Июл Авг Сен Окт Ноя Дек
0 3 3 6 1 4 6 2 5 0 3 5

Коды веков: у 1700-х годов 4, у 1800-х 2, у 1900-х 0, у 2000-х 6, у 2100-х 4.

Алгоритм:

  1. Возьмите две последние цифры года и прибавьте к ним их четверть без остатка. Для 1945 года это 45 + 11 = 56.
  2. Прибавьте число месяца, код месяца и код века.
  3. Если год високосный, а дата в январе или феврале, вычтите 1.
  4. Найдите остаток от деления на 7. Остаток 1 означает понедельник, 2 вторник и так далее до 6, субботы. Остаток 0 означает воскресенье.

Проверим на 9 мая 1945 года: 9 + 1 (май) + 0 (1900-е) + 45 + 11 = 66. Остаток от деления 66 на 7 равен 3, это среда.

Ещё два примера. 22 июня 1941 года: 22 + 4 + 0 + 41 + 10 = 77, остаток 0, воскресенье. 1 января 2024 года: 1 + 0 + 6 + 24 + 6 − 1 (високосный январь) = 36, остаток 1, понедельник.

Способ работает для любой даты с 1700 по 2199 год, если брать коды веков из списка выше. «Четверть без остатка» означает целочисленное деление: 45 / 4 даёт 11, дробную часть отбрасываем.

Формула Зеллера

Если считать нужно в программе, а готового модуля под рукой нет, пригодится формула Зеллера. Она даёт номер дня одной строкой арифметики, а записать её удобно в виде функции:

def zeller(day, month, year):
    if month < 3:          # январь и февраль — 13-й и 14-й месяцы прошлого года
        month += 12
        year -= 1
    k = year % 100         # год внутри века
    j = year // 100        # номер века
    h = (day + 13 * (month + 1) // 5 + k + k // 4 + j // 4 + 5 * j) % 7
    return ["суббота", "воскресенье", "понедельник", "вторник",
            "среда", "четверг", "пятница"][h]

print(zeller(9, 5, 1945))
print(zeller(22, 6, 1941))
print(zeller(12, 4, 1961))
среда
воскресенье
среда

У формулы две особенности. Отсчёт идёт от субботы: результат 0 означает субботу, а не воскресенье или понедельник. А январь и февраль считаются последними месяцами предыдущего года, иначе високосный день сбивает результат.

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

День недели по дате в Excel

В Excel день недели возвращает функция ДЕНЬНЕД. Синтаксис по справке Microsoft: ДЕНЬНЕД(дата_в_числовом_формате;[тип]). Без второго аргумента функция считает неделю с воскресенья, и для среды вернёт 4, а не 3.

Тип Что возвращает
1 или опущен от 1 (воскресенье) до 7 (суббота)
2 от 1 (понедельник) до 7 (воскресенье)
3 от 0 (понедельник) до 6 (воскресенье)

Для привычной русской нумерации пишите =ДЕНЬНЕД(A2;2). Название дня даёт функция ТЕКСТ: =ТЕКСТ(A2;"ДДДД") выведет полное название, этот формат приведён в справке по функции ТЕКСТ.

Функция с тем же именем есть в Яндекс Таблицах, её описание лежит в справке Яндекс 360. Если нужно посчитать не день недели, а число дней между датами, это другая задача, она разобрана в статье про разницу дат в Excel.

Почему Excel ошибается на датах до 1900 года

Excel хранит дату как номер дня, отсчитанный от 1 января 1900 года. Так устроена система дат 1900, которая по справке Microsoft стоит по умолчанию в Excel для Windows. Дату 9 мая 1945 года Excel поймёт, а дату раньше 1 января 1900 года в эту систему уже не уложить.

Вторая проблема тоньше. Excel считает 1900 год високосным, хотя он таким не был, и Microsoft прямо пишет, что из-за этого ДЕНЬНЕД возвращает неверные значения для дат до 1 марта 1900 года. Для старых дат берите Python или считайте в уме. Если Python для вас новый, начните со списка основных команд.

Даты до 1918 года: старый и новый стиль

Python считает по григорианскому календарю даже для дат, когда его ещё не было. В документации Python такой календарь называется «пролептическим григорианским»: нынешние правила продлены в прошлое без конца.

В России григорианский календарь ввели декретом 1918 года: сразу после 31 января наступило 14 февраля, об этом есть заметка Президентской библиотеки. Поэтому даты в документах до 1918 года обычно записаны по старому, юлианскому стилю.

Ошибка выглядит так: берёте дату Бородинского сражения, 26 августа 1812 года по старому стилю, и подставляете её в калькулятор как есть.

from datetime import date, timedelta

DAYS = ["понедельник", "вторник", "среда", "четверг",
        "пятница", "суббота", "воскресенье"]

old = date(1812, 8, 26)            # дата по старому стилю
new = old + timedelta(days=12)     # в XIX веке разница 12 дней
print(new, DAYS[new.weekday()])
print(old, DAYS[old.weekday()])    # ошибка: старый стиль как новый
1812-09-07 понедельник
1812-08-26 среда

Правильный ответ: понедельник. Сначала дату переводят в новый стиль, потом считают. Разница между стилями в XVIII веке 11 дней, в XIX 12, а с марта 1900 года 13.

Отсюда и ответ на вопрос, какой день недели был 1 января 1 года. По правилам Python это понедельник: date(1, 1, 1).weekday() возвращает 0. Но в I веке жили по юлианскому календарю, и по нему тот же день был субботой.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Через сколько лет повторяется календарь

Календарь целого года совпадает, когда у двух лет один и тот же день недели 1 января и оба они високосные или оба обычные. Найдём, какие годы повторяют календарь 1945-го:

import calendar

base = calendar.monthcalendar(1945, 1)
same = [y for y in range(1946, 2030)
        if calendar.isleap(y) == calendar.isleap(1945)
        and calendar.monthcalendar(y, 1) == base]
print(same)
[1951, 1962, 1973, 1979, 1990, 2001, 2007, 2018, 2029]

Промежутки идут в порядке 6, 11, 11 лет, и через 28 лет всё повторяется: 1945, 1973, 2001, 2029. Цикл в 28 лет работает внутри одного века. На границе, где год вроде 1900 или 2100 не високосный, ряд сбивается.

Для отдельной даты повторов больше. 9 мая приходилось на среду ещё в 1956, 1984 и 2012 годах: в високосный год с 1 марта календарь совпадает с обычным, начавшимся на день позже.

Частые ошибки

Довольный Рой сверяет два календаря и ставит галочку
  • Результат сдвинут на один день. Перепутаны weekday() и isoweekday() в Python или забыт второй аргумент ДЕНЬНЕД в Excel. Решение: проверьте, с какого дня начинается отсчёт, и сверьте результат с сегодняшней датой.
  • Старая дата посчитана без перевода в новый стиль. Для документов до февраля 1918 года сначала прибавьте 11, 12 или 13 дней в зависимости от века.
  • Excel выдаёт ошибку или чушь на XIX веке. Он не знает дат раньше 1900 года. Решение: Python или способ кодов.
  • Названия дней по-английски. Метод strftime("%A") и calendar.prmonth() берут язык из локали системы. Список из семи русских названий надёжнее.
  • В формуле Зеллера воскресенье оказалось субботой. Её отсчёт начинается с субботы, а январь и февраль относятся к прошлому году.

Где освоить Python системно

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

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

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология137 000 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox122 226 ₽4108 ₽/мес.9 месяцевОбзор курса
Профессия Python-разработчик
Перейти на сайт курса
SkillFactorySkillFactory140 040 ₽4279 ₽/мес.10 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Какой день недели был 9 мая 1945 года?

Среда. Это день по григорианскому календарю, по которому Россия живёт с 1918 года, так что пересчитывать стиль не нужно.

Как узнать, в какой день недели я родился?

В Python подставьте дату рождения в date(год, месяц, число).weekday(): 0 означает понедельник, 6 воскресенье. В Excel поможет формула =ТЕКСТ(A2;"ДДДД"), а без компьютера можно посчитать в уме по кодам месяцев.

Какой день был две недели назад?

Тот же день недели, что сегодня: 14 дней складываются ровно в две недели. Дату покажет date.today() - timedelta(days=14).

Через сколько лет повторяется календарь?

Внутри одного века календарь года повторяется через 6 или 11 лет, а полный цикл занимает 28 лет. Календарь 1945 года совпал с календарями 1951, 1962 и 1973 годов.

Почему ДЕНЬНЕД в Excel возвращает 4 для среды?

Без второго аргумента функция начинает неделю с воскресенья. Напишите =ДЕНЬНЕД(A2;2), тогда понедельник будет 1, а среда 3.

Какой день недели был 1 января 1 года?

По правилам Python, которые продлевают григорианский календарь в прошлое, понедельник. По юлианскому календарю, который тогда действовал, это была суббота.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!