Определение дня недели


Определение дня недели для любой даты может быть выполнено с помощью множества алгоритмов. Кроме того, вечные календари не требуют вычислений от пользователя и по сути представляют собой справочные таблицы. Типичное применение — вычислить день недели, в который кто-то родился или произошло конкретное событие.

В числовом расчёте дни недели представлены в виде номеров дней недели. Если понедельник является первым днём недели, дни могут быть закодированы от 1 до 7, с понедельника по воскресенье, как это практикуется в ISO 8601. День, обозначенный цифрой 7, также может быть обозначен как 0, применяя арифметический модуль 7, который вычисляет остаток числа после деления на 7. Таким образом, число 7 обрабатывается как 0, 8 как 1, 9 как 2, 18 как 4 и так далее. Если воскресенье считается днём 1, то 7 дней спустя (то есть день 8) также является воскресеньем, а день 18 совпадает с днём 4, который является средой, поскольку он выпадает на три дня после воскресенья.

Базовый подход почти всех методов вычисления дня недели начинается с «даты привязки»: известной пары (например, 1 января 1800 года как среда), определения количества дней между известным днём и днём, который вы пытаетесь определить, и используя арифметический модуль 7, чтобы найти новый числовой день недели.

Один из стандартных подходов — найти (или вычислить, используя известное правило) значение первого дня недели данного столетия, найти (или вычислить, используя метод сравнения) поправку на месяц, вычислить количество високосных лет с начала века, а затем сложить их вместе с количеством лет с начала века и числом дня месяца. В конце концов, получается счётчик дней, к которому применяется модуль 7 для определения дня недели даты.[4]

Некоторые методы сначала делают все добавления, а затем отбрасывают семёрки, тогда как другие отбрасывают их на каждом шаге, как в методе Льюиса Кэрролла. Любой способ вполне жизнеспособен: первый проще для калькуляторов и компьютерных программ, второй — для мысленных расчётов (вполне возможно проделать все вычисления в голове, немного потренировавшись). Ни один из приведённых здесь методов не выполняет проверку диапазона, поэтому неверные даты приведут к ошибочным результатам.