rus | eng
|
||||||||||||||||||||||||||||
Юлианский деньДобавлено 9 Января 2008В этой статье описаны методы для перевода даты Юлианского или Григорианского календаря в соответствующий порядковый номер — Юлианский день, JD (англ. Julian Day), и перевод в обратную сторону. Основные замечанияНомер Юлианского дня, или проще говоря, Юлианский день (JD) — это натуральное число (включающее и дробную часть), выражающее количество дней, прошедших с начала 4712 г. По традиции принято считать, что Юлианский день начинается в полдень по среднему Гринвичскому времени, что есть 12ч по Всемирному времени, UT (англ. Universal Time). Если Юлианский день относится к моменту времени, измеряемому по шкале Динамического времени (или Эфемеридного времени), то, как правило, используют термин Юлианский Эфемеридный День, JDE (англ. Julian Ephemeris Day). Пример:
26.4 Апреля 1977 UT = JD 2443 259.9
В методах, описанных ниже, следует учитывать реформу Григорианского календаря. А именно, за днем 4 октября 1582 года (Юлианский календарь) следует день 15 октября 1582 (Григорианский календарь). Григорианский календарь был не сразу признан во всем мире. Это нужно учитывать, обращаясь к историческим реалиям. Так, например, в Великобритании реформа произошла в конце 1752 г. н.э., а в Турции Юлианский календарь просуществовал вплоть до 1927 г. Юлианский календарь был учрежден в Римской Империи Юлием Цезарем в -45 г, и достиг своей окончательной формы около 8 года. Тем не менее, мы будем следовать астрономической практике, заключающейся в экстраполировании Юлианского календаря в прошлое на бесконечное время. В связи с этим мы можем говорить, например, о солнечном затмении 28 августа -1203 г. по Юлианскому клендарю, хотя в это далекое время Римской Империи еще не существовало и император Август, чьим именем назван месяц, даже не был рожден! В этом заключается расхождение во мнениях астрономов и историков по поводу того, как исчислять года, предшествующие 1-му году. Мы будем годы «до н.э.» исчислять так, как принято в астрономии. То есть год, предшествующий году +1, есть год нулевой, а год, предшествующий последнему, есть год -1. Год, который историки называют 585 г. до н.э., соответсвует -584 году в астрономии. Такая отрицательная нумерация годов как нельзя лучше подходит для математических рассчетов. Например, при исторической нумерации годов правило деления на 4 обнаруживает ошибку: високосные годы не кратны четырем: 1-й, 5-й, 9-й, 13-й, ... гг. до н.э. Однако, при использовании астрономического способа нумерации последовательность соответствует истине: 0-й, -4-й, -8-й, -12-й, ... гг. кратны 4-м и являются високосными. Правило деления на 4 не нарушается. Мы будем обозначать целую часть числа x как INT(x), т.е. то число, которое предшествует его дробной части. Примеры:
INT(7/4) = 1 INT(5.02) = 5
Это может вызвать некоторые проблемы с отрицательными числами. Существуют два понимания операции INT. В некоторых компьютерах и языках программирования, INT(x) есть наибольшее целое число, меньшее или равное числу x. В этом случае мы получим, например, INT(-7.83)=-8, так как -7 действительно больше чем -7.83. В других языках, INT есть целая часть записываемого числа, т.е. то число, что предшествует символу десятичной точки. Тогда INT(-7.83)=-7. Эта операция носит название отсечение (англ. truncation), и многие языки прогаммирования имеют обе функции: INT(x), выполоняющую операцию в первом понимании, и TRUNC(x). Впредь будьте внимательны, когда используете функцию INT для отрицательных чисел (для положительных чисел оба варианта понимания функции дадут один результат). В формулах, данных ниже, аргумент функции INT всегда положителен. Вычисление Юлианского дняСледующий метод справедлив как для положительных, так и для отрицательных значений годов, не не для отрицательного значения Юлианского дня (JD). Пусть для заданной календарной даты Y — номер года, M — номер месяца (1 для января, 2 для февраля и т.д., 12 для декабря), и D — день месяца (с десятичной дробной частью, если это имеет место).
Число 30.6 (вместо 30.6001) будет давать верный результат, но 30.6001 используется для того, чтобы целое число (второе слагаемое в формуле) было найдено безошибочно. На самом деле, вместо 30.6001 можно использовать и 30.601, и 30.61. Для примера, произведение 5*30.6 дает целое число 153. Однако, большинство компьютеров представят 30.6 недостаточно точно, и мы можем получить 152.999998, что после отсечения дробной части даст 152. Вычисленное значение JD будет неверным.
Пример 1Вычисление Юлианского дня для даты 4.81 Октября 1957, времени запуска первого искусственного спутника Земли. Имеем: Y = 1957, M = 10, D = 4.81.Так как M > 2, мы оставляем Y и M неизменными. Дата дана по Григорианскому календарю, поэтому: A = INT(1957 / 100) = INT(19.57) = 19 B = 2 - 19 + INT(19 / 4) = 2 - 19 + 4 = -13 JD = INT(365.25 * 6673) + INT(30.6001 * 11) + 4.81 - 13 - 1524.5 JD = 2436116.31
Пример 2Вычисление Юлианского дня для даты 27 Января 333 года, 12ч Поскольку M = 1, мы имеем: Y = 333 - 1 = 332 и M = 1 + 12 = 13. Так как дата дана по Юлианскому календарю, принимаем B = 0. JD = INT(365.25 * 5048) + INT(30.6001 * 14) + 27.5 + 0 - 13 - 1524.5 JD = 1842713.0 Ниже приведен список дат с соответствующими значениями Юлианских дней. Эти данные могут быть полезны при тестировании программ.
Если дата лежит в интервале от 1 марта 1900 до 28 февраля 2100, в формуле [1] мы имеем B = -13. В некоторых практических задачах необходимо знать Юлианский день JD0, соответствующий 0.0 января данного года (31.0 декабря предшествующего года). Для года (year) в Григорианском календаре JD0 вычисляется следущим образом: Y = year - 1 A = INT(Y / 100) JD0 = INT(365.25 * Y) - A + INT(A / 4) + 1721424.5 Для лет в пределах от 1901 до 2099 включительно формула сводится к: JD0 = 1721409.5 + INT(365.25 * (year - 1))
Когда год является високосным?В Юлианском календаре год является високосным (имеет 366 дней), если его численное значение кратно 4. Все другие года считаются обычными (по 365 дней). Например, 900-й и 1236-й годы были високосными, а 750-й и 1429-й — обычными. Те же правила справедливы и для Григорианского календаря, за следующим исключением: годы, оканчивающиеся на два нуля и не кратные 4, такие как 1700-й, 1800-й, 1900-й и 2100-й, являются обычными. Другие же годы, оканчивающиеся на два нуля и делящиеся нацело на 400, являются високосными: как 1600-й, 2000-й, 2400-й и др. В современной практике встречается термин Модифицированный Юлианский день, MJD (англ. Modified Julian Day), например, при указании элементов орбит искусственных спутников. В противоположность Юлианскому дню, Модифицированный Юлианский день начинается по Гринвичскому средему времени в полночь. Таким образом: MJD = JD - 2400000.5 И, вследствие этого, дню MJD = 0.0 соответствует дата 0ч 17 ноября 1858 г. Вычисление календарной даты по Юлианскому днюСледующий метод справедлив как для положительных, так и для отрицательных значений годов, но не для отрицательного значения Юлианского дня (JD). Добавляем 0.5 к исходному значению Юлианского дня, и положим Z равной целой части, а F — дробной части полученного числа. Если Z < 2299161, полагаем A = Z. Если Z >= 2299161, вычисляем: α = INT((Z - 1867216.25) / 36524.25) A = Z + 1 + α - INT(α / 4) Далее: B = A + 1524 C = INT((B - 122.1) / 365.25) D = INT(365.25 * C) E = INT((B - D) / 30.6001) День месяца (с десятичной дробной частью) равен: B - D - INT(30.6001 * E) + F Номер месяца есть:
E - 1
, если E > 14
Номер года есть:
C - 4716
, если m > 2
В противоположность тому, что было сказано ранее про формулу [1], в формуле для E число 30.6001 не может быть заменено на 30.6, даже если вычисления на компьютере производятся точно. В противном случае мы можем получить 0-е февраля вместо 31 января или 0-е апреля вместо 31 марта.
Пример 3Вычисление календарной даты, соответствующей JD = 2436116.31.
2436116.31 + 0.5 = 2436116.81 α = INT((2436116 - 1867216.25) / 36524.25) = 15 A = 2436116 + 1 + 15 - INT(15 / 4) = 2436129 Далее находим: B = 2437653 C = 6673 D = 2437313 E = 11 День месяца d = 4.81 Месяц m = E - 1 = 10 (так как E < 14) Год y = C - 4716 = 1957 (так как m > 2) Отсюда искомая дата: 4.81 Октября 1957. Интервал между датамиЧисло дней между двумя датами может быть найдено при помощи разности соответствующих значений Юлианских дней.
Пример 4Периодическая комета Галлея проходила через перигелий орбиты 20 Апреля 1910 и 9 Февраля 1986. Сколько дней прошло между этими двумя проходжениями?
1910 апр 20.0 соответствует Юлианский день JD = 2418781.5 День недели
День недели, соответствующий заданной дате, может быть рассчитан следующим образом. Нужно вычислить JD для этой даты в 0ч, добавить 1.5, затем поделить результат на 7. Остаток от деления будет соответствовать дню недели, а именно: 0 — воскресенье, 1 — понедельник, 2 — вторник, 3 — среда, 4 — четверг, 5 — пятница, 6 — суббота.
Пример 5Найти день недели для даты 30 Июня 1954.
1954 июн 30.0 соответствует Юлианский день JD = 2434923.5 День годаПорядковый номер дня в году N может быть рассчитан с помощью следующей формулы. N = INT((275 * M) / 9) - K * INT ((M + 9) / 12) + D - 30 где M – номер месяца, D – день месяца, и:
K = 1 для високосного года N принимает целые значения от 1 для 1 января до 365 (или 366 для високосного года) для 31 декабря.
Пример 6Найти день года для даты 14 Ноября 1978
Обычный год, M = 11, D = 14, K = 2
Пример 7Найти день года для даты 22 Апреля 1988
Високосный год, M = 4, D = 22, K = 1
Теперь обсудим обратную проблему: пусть известен номер дня в году N, и необходимо найти соответствующую календарную дату, а именно номер месяца M и день месяца D. Ниже приведен алгоритм этой задачи.
K = 1 для високосного года M = INT((9 * (K + N)) / 275 + 0.98) Если N < 32, тогда M = 1. D = N - INT(275 * M / 9) + K * INT((M + 9) / 12) + 30 |
||||||||||||||||||||||||||||
© Alexander Krutov, 2008—2023 |