Почему библиотеки преобразования календаря вращаются вокруг юлианских дней? - PullRequest
4 голосов
/ 22 декабря 2011

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

Из любопытства я хотел посмотреть, возможно ли прямое преобразование.Исследуя это, я обнаружил, что стандартно конвертировать даты в юлианские дни, а затем в желаемую календарную систему.

Я нашел это в нескольких библиотеках, таких как: http://www.php.net/manual/en/ref.calendar.php http://www.fourmilab.ch/documents/calendar/calendar.js

и упоминается в сообщении на форуме здесь: http://www.physicsforums.com/showthread.php?t=173119

Что меня беспокоит, так это почему!Это стандарт, определенный какой-то группой?Это просто исторически так?

Разве не было бы эффективнее придумать алгоритмы для прямого преобразования дат?или наоборот, что делает юлианские дни такими эффективными?

1 Ответ

7 голосов
/ 22 декабря 2011

Если вы хотите конвертировать между n различными календарями и реализовали алгоритмы для перехода из любого одного формата в любой другой формат, вам потребуется n^2 - n алгоритмы преобразования.Однако если вместо этого написаны алгоритмы для преобразования любого формата календаря в один базовый формат календаря, а затем написаны алгоритмы для преобразования из базового формата в любой другой формат, вам нужно только написать 2(n-1) алгоритмы.

Все эти форматы календаря представляют одно и то же время.Самый основной способ представления времени - это количество времени, прошедшее с некоторой контрольной точки, так что это наиболее целесообразно в качестве базового формата.Это именно то, что юлианская дата , количество дней с 1 января 4713 г. до н.другой формат, однако любой специализированный алгоритм преобразования, по сути, собирается взять введенную дату, преобразовать ее в какой-то нейтральный переход между представлениями даты и затем преобразовать это в желаемый формат календаря.Однако, поскольку юлианская дата представляет собой простой формат с одним числом, это практически то же самое, что преобразование в юлианскую дату, а затем преобразование в какой-либо другой формат, поэтому прирост производительности будет незначительным.Кроме того, преобразования календаря, вероятно, не являются узким местом производительности любого приложения, поэтому выжимание из них максимально возможной производительности, вероятно, не является хорошим использованием чьего-либо времени.

...