На этом сайте есть пара ошибок в алгоритме расчета календарной даты по юлианскому дню, так что, кто будет использовать, будьте повнимательнее. А сделал расчет в два этапа: сначала, рассчитал календарную дату, а потом по алгоритму, приведенному на этом же сайте, рассчитал номер дня в году. Теперь с представлением этой даты в нужном формате мучаюсь:) Никому не встречался прямой алгоритм "модифицированный юлианский день - год и день в году"?
Поиск по слову mjd2doy вывел на изящную программку японского автора KAMENO Seiji. Разбраться с алгоритмом не составит труда.
Ну хорошо, напишу Вам алгоритм по программе. Дан модифицированный юлианский день mjd. Найти год year и день года doy. 1) Находим количество дней от 1901/1/0: day = mjd - 15384 2) Находим день года и год: doy = д.ч.[д.ч.[day/1461]/365] year= 1901 + 4*ц.ч.[day/1461] + ц.ч.[д.ч.[day/1461]/365] Здесь и далее ц.ч.[] - опереация взятия целой части, д.ч.[] - опереация взятия дробной части 3) Если год високосный, т.е. ц.ч.[д.ч.[(day-1)/1461]/365] = 3, то скорректировать день: doy = д.ч.[day/1461] - 3*365 4) Если день получился равным нулю (последний день года), скорректировать день и год: doy = 365 для невисокосного года и doy = 366 для високосного; year = year-1 Алгоритм работает медду 1901 и 2099гг., т.е. 15384 < mjd < 88433 Надеюсь, перевёл правильно (на С я не пишу). Вопросы по алгоритму - к автору .
Оффтоп (Move your mouse to the spoiler area to reveal the content) Я тоже. Я на Fortran пишу. 88433? Это модифицированный юлианский день 31 (30) декабря 2100 года, по-моему.
Оффтоп (Move your mouse to the spoiler area to reveal the content) Ну вот и описка Конечно, до 2099г. Исправил.