Получить день недели

Задача: получить день недели и дату по пролептическому григорианскому календарю (это может быть 2009, 935, 2, 342 лет назад и любая дата на оси времени).

Нигде не могу найти математическую модель. Может кто уже сталкивался с этой проблемой?

P.S. Язык реализации не важен


person subtronic    schedule 26.01.2015    source источник
comment
И повторить ответ, который не был ответом, потому что он должен был быть комментарием: я думаю, вы ищете конгруэнтность Целлера.   -  person Martijn Pieters    schedule 26.01.2015
comment
И бодда: не стесняйтесь публиковать правильный ответ; например объясните, как здесь может помочь конгруэнтность Целлера, возможно, даже с помощью примера реализации. Однако просто ссылки на страницу в Википедии недостаточно для ответа.   -  person Martijn Pieters    schedule 26.01.2015
comment
Я ищу математическую модель, возможно, какое-то объяснение того, как связаны простой григорианский и пролептический григорианский календарь. Я нашел конгуруентность Зеллера, но не могу понять, как она работает.   -  person subtronic    schedule 26.01.2015
comment
Тогда однострочный ответ, который был опубликован, стал еще более бесполезным.   -  person Martijn Pieters    schedule 26.01.2015


Ответы (1)


Если январь и февраль считаются двумя последними месяцами предыдущего года, то рабочий день отличается от начала марта на (13m-1)/5) дней; скорректируйте високосные годы и високосные века, чтобы вычислить день недели:

function weekday(ccyy, mm, dd) # zeller's congruence
    days := ["Sun", "Mon", "Tues", "Wednes", "Thurs", "Fri", "Satur"]
    if mm < 3 then mm, ccyy := mm + 10, ccyy - 1 else mm := mm - 2
    cc, yy := ccyy // 100, ccyy % 100
    day := (dd + (13 * mm - 1) // 5 + yy + yy // 4 + cc // 4 - 2 * cc) % 7
    return days[day] || "day"

Это немного меняется для дат до принятия григорианского календаря.

person user448810    schedule 26.01.2015