Расчет дня недели в годах больше, чем 9999 - PullRequest
1 голос
/ 04 января 2011

Мне было интересно, есть ли какие-нибудь алгоритмы, которые вычисляют день недели в годах, которые больше, чем год 9999.

Алгоритмы, такие как Алгоритм Зеллера или этот здесь дает ложные результаты, поскольку они обрабатывают только 4-значный год.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 04 января 2011

На самом деле вам не нужен новый алгоритм.Пока у вас есть один алгоритм с диапазоном 400 лет (или более), вы можете ввести любую дату в диапазон этого алгоритма.Это работает, потому что григорианский календарь повторяется каждые 400 лет (XX / YY / ZZZZ - это тот же день недели, что и XX / YY / (ZZZZ + 400)).

Итак, если предположить, что у вас есть какой-то алгоритм, который работаетдля дат с 01.01.1600 по 31.12.1999 (включительно) вы можете рассчитать день недели для любой даты, используя (year mod 400)+1600 в качестве года.

Если у вас нет 400-год, начиная с 1/1 / XXXX (где XXXX mod 400 = 0), вам нужно немного изменить дату, чтобы получить правильный результат (вместо добавления 1600 к году, добавьте X * 400, где X - целое число, такоечто некоторые из дат будут в диапазоне, затем добавьте или вычтите 400 к году для тех дат, которые находятся вне диапазона).

1 голос
/ 04 января 2011

http://lxr.linux.no/linux/net/netfilter/xt_time.c, например, просто считает это.Чтобы уменьшить количество итераций в циклах, можно использовать статические таблицы, как это было сделано там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...