Расчет лунных / лунно-солнечных праздников в питоне - PullRequest
7 голосов
/ 28 июня 2011

Здесь есть какие-нибудь орехи? Я искал информацию о том, как рассчитать праздники текущего года, которые происходят нерегулярно в григорианском календаре. Обычно это происходит потому, что праздник основан на старом лунном календаре.

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

Мой прогресс на данный момент:

Complete:

  • Пасха: можно найти с помощью python-dateutil .
  • Ханука и другие календарные праздники на иврите можно найти с помощью holiday.py из python date_util * s *.

Закрыть:

  • Рамадан: в модуле date_utils есть функция исламского календаря, которую я пытался получить, в основном, правильные, но не совсем точные результаты. (Он хочет преобразовать все в и из юлианских дат, я не уверен почему).

<code>
    import calendar_util as cu        # from date utils; no jokes from .br
    #
    # year = int(sys.argv<a href="http://labix.org/python-dateutil#head-8863c4fc47132b106fcb00b9153e3ac0ab486a0d" rel="nofollow">1</a>) or datetime.now().year
    tj = cu.gregorian_to_jd(year, 1, 1)   # this year in julian
    ti = cu.jd_to_islamic(tj)             # this year in islamic cal
    rj = cu.islamic_to_jd(ti[0], 9, 1)    # first day of ramadan in julian
    #
    print cu.jd_to_gregorian(rj)          # first day of ramadan in greg
    # output: (2011, 8, 1)                # correct

Я получаю результаты в один выходной в 2014, 2016 годах, что подтверждается на этом сайте , хотя на мой вкус упоминание о "наблюдениях в Северной Америке" немного расплывчато. Был бы признателен за указатели для повышения точности, например, если 1 января достигнет определенной годовой даты отсечения. Исламские годы короче и поэтому наступают раньше каждый год.

Nada:

  • Китайский Новый год: я не нашел ничего, кроме этого обсуждения , где ответ не раскрывается.

К чести SO, я нашел ссылку на эту книгу за 30 долларов, но предпочел бы не платить и копать столько за несколько строк кода. В дискуссии об Amazon упоминается, что все подпрограммы находятся в календаре Emacs. Однако я никогда даже не устанавливал Emacs, так что, если это единственный доступный код, надеюсь, кто-нибудь поможет мне выкопать его и упростить, чтобы дать мне Рамадан / китайский Нью-Йорк на текущий год.

Не уверен, что это полезно здесь, но события солнца и луны доступны через pyephem , который я уже использую. Может быть, это тоже пригодится.

1 Ответ

4 голосов
/ 28 июня 2011

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

Во-первых, юлианская дата имеет смысл в качестве основы для расчета лунных и лунно-солнечных дат, потому что она тикает в секундах по СИкак измерено на геоиде.Таким образом, формулы для прогнозирования количества секунд SI между этими событиями могут быть легко коррелированы.http://en.wikipedia.org/wiki/Julian_day

Лунисолярные праздники и планирование еврейского календаря в целом зависят от соотношения фазы луны и солнечного дня недели.В еврейских и исламских календарях день начинается на закате.Так что, если луна достигнет 100% фазы около заката, это может повлиять на то, когда наступят праздники и как календарь запланирован на будущее.Но во сколько закат?Это зависит не только от долготы, но и от широты наблюдения.Поэтому вы должны планировать лунно-солнечные календари и праздники из определенного места на геоиде.http://en.wikipedia.org/wiki/Jewish_calendar#Principles

Эти факторы привели к использованию упрощенных церковных систем, из которых несколько широко используются в мире, для «вычисления» даты Пасхи, используемого вместо прямого астрономического наблюдения.http://en.wikipedia.org/wiki/Computus

Поэтому требования традиционного исламского календаря, определяемые в терминах астрономических наблюдений, включая закат, должны быть привязаны к определенному месту на геоиде, если вы собираетесь прогнозировать даты праздников и интервалы времени.в СИ секунд бесконечно в прошлое или будущее.Это может быть причиной замечаний о «наблюдениях в Северной Америке» и ошибок в датах будущих праздников, о которых вы упомянули;если наблюдение фазы луны против солнечного дня будет производиться в Северной Америке, а не в Мекке, календарь будет планироваться совсем по-другому.

Один неизбежный и непредсказуемый фактор в предсказании любой астрономической эфемеры и, следовательно, лунногоили лунно-солнечный календарь событий, это изменение вращения Земли во времени.Существует простая формула для оценки этого изменения, но фактическая измеряется с использованием сигналов от очень далеких небесных объектов.http://en.wikipedia.org/wiki/Leap_second Из-за этой неопределенности и из-за чувствительности некоторых календарей к корреляции между лунной фазой и солнечными эфемеридами всегда есть горизонт (далекое?) Будущее этих календарей, после которого последовательность датнепостижимо.

PyEphem выглядит как очень классный пакет, и я сам проверю.Если его встроенная логика не отвечает вашим потребностям, вы довольно долго решаете, как предсказывать небесные события на неопределенный срок в будущем.Вот вам вкус: http://en.wikipedia.org/wiki/Precession_of_the_equinoxes#Values

Опять же, у меня нет конкретного кода для вас, но я надеюсь, что эта информация не повторяет того, что вы уже знаете, и полезна для вас.

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