stringtranslate.com

Сравнение Целлера

Сравнение Целлера — это алгоритм , разработанный Кристианом Целлером в 19 веке для расчета дня недели для любой даты по юлианскому или григорианскому календарю . Можно считать, что он основан на преобразовании юлианского дня в календарную дату.

Формула

Для григорианского календаря сравнение Целлера равно

для юлианского календаря это

где

В этом алгоритме январь и февраль считаются 13 и 14 месяцами предыдущего года. Например, если это 2 февраля 2010 г., алгоритм считает дату вторым днем ​​четырнадцатого месяца 2009 г. (14 февраля 2009 г. в формате ДД/ММ/ГГГГ).

Для даты недели ISO «День недели (от 1 = понедельник до 7 = воскресенье) используйте

Анализ

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

Таким образом, для григорианского календаря различные части этой формулы можно понимать следующим образом:

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

Поскольку григорианский календарь был принят в разное время в разных регионах мира, место события имеет важное значение для определения правильного дня недели для даты, произошедшей в этот переходный период. Это требуется только до 1929 года, поскольку это был последний год, когда юлианский календарь все еще использовался какой-либо страной на земле, и поэтому не требуется для 1930 года или позже.

Формулы можно использовать в упреждающих целях, но «Год 0» на самом деле — это год 1 до н.э. (см. нумерацию астрономических лет ). Юлианский календарь на самом деле является предварительным вплоть до 1 марта 4 г. н. э. из-за плохого управления в Риме (но не в Египте) в период с момента введения календаря в силу 1 января 45 г. до н. э. (который не был високосным годом). Кроме того, оператор по модулю может обрезать целые числа в неправильном направлении (потолок вместо минимума). Чтобы учесть это, можно добавить достаточное количество лет, кратное 400 григорианским или 700 юлианским годам.

Примеры

Для 1 января 2000 г. датой будет считаться 13-й месяц 1999 г., поэтому значения будут следующими:

Таким образом, формула оценивается как .

(36 получается из , усеченного до целого числа.)

Однако для 1 марта 2000 г. дата рассматривается как третий месяц 2000 г., поэтому значения становятся

поэтому формула оценивается как .

Реализации в программном обеспечении

Базовая модификация

Формулы основаны на математическом определении деления по модулю , что означает, что -2 по модулю 7 равно положительному 5. К сожалению, в большинстве компьютерных языков функция усечения реализуется методом усечения, -2 по модулю 7 возвращает результат -2. Итак, чтобы реализовать сравнение Целлера на компьютере, формулы следует немного изменить, чтобы числитель был положительным. Самый простой способ сделать это — заменить − 2 J на ​​+ 5 J и J на ​​+ 6 J .

Для григорианского календаря сравнение Целлера становится

Для юлианского календаря сравнение Целлера принимает вид


Легко видеть, что в данном году последний день февраля и 1 марта являются хорошими датами испытаний.

В качестве примечания: если у нас есть трехзначное число abc, где a, b и c — цифры, каждая неположительная, если abc неположительная; у нас есть (abc) mod 7 = 9*a + 3*b + c. Повторите формулу до одной цифры. Если результат 7, 8 или 9, то вычтите 7. Если вместо этого результат отрицательный, то прибавьте 7. Если результат все еще отрицательный, то прибавьте 7 еще раз. Используя этот подход, мы можем избежать беспокойства по поводу языковых различий в оценках mod 7. Это также может улучшить технику мысленной математики.

Общее упрощение

Целлер использовал десятичную арифметику и счел удобным использовать J и K для обозначения года. Но при использовании компьютера проще обрабатывать измененные год Y и месяц m , которые в январе и феврале равны Y - 1 и m + 12 :

Для григорианского календаря сравнение Целлера становится

В этом случае нет возможности опустошения из-за единственного отрицательного члена, потому что .

Для юлианского календаря сравнение Целлера принимает вид

Приведенный выше алгоритм упоминается для григорианского случая в RFC  3339, Приложение B, хотя и в сокращенной форме, которая возвращает 0 для воскресенья.

Другие варианты

По крайней мере, три других алгоритма разделяют общую структуру сравнения Целлера в ее типе «общего упрощения», также используя m ∈ [3, 14] ∩ Z и конструкцию «модифицированного года».

Можно показать, что оба выражения прогрессируют с отклонением на единицу от исходного компонента длины месяца в требуемом диапазоне m , что приводит к начальному значению 0 для воскресенья.

Смотрите также

Рекомендации

  1. ^ Правило каждые пять месяцев применяется только к двенадцати месяцам года, начиная с 1 марта и заканчивая последним днем ​​следующего февраля.
  2. ^ Аб Стоктон, младший «Материал, связанный с сравнением Целлера». «Мерлин», из архива NCTU Тайваня .
  3. ^ Тендеринг, Клаус. «Вопросы недели». www.tondering.dk .

Библиография

Каждая из этих четырех одинаковых газет с изображениями посвящена, во-первых, дню недели, а во-вторых, дате пасхального воскресенья в юлианском и григорианском календарях. Страницы ссылаются на переводы на английский язык.

Внешние ссылки