Русская Википедия:Юлианская дата

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Юлиа́нская да́та (JD) — астрономический способ измерения времени, при котором считается число суток, прошедших начиная с полудня понедельника, 1 января 4713 года до н. э. пролептического юлианского календаря или, что то же самое, 24 ноября 4714 года до н. э. пролептического григорианского календаря (соответственно, −4712 год и −4713 год по астрономическому счёту лет[1]). Первый день имел номер 0. С тех пор по настоящее время прошло немногим менее 2,5 миллиона дней. Даты сменяются в полдень UT или TT. Для точного обозначения времени применяют дробную часть, например, JD = 2451545,25 соответствует 18 часам 1 января 2000 года; 3 часа дня 2 августа 1942 года — JD 2430574,125; 13,5 июня 1944 года — JD 2431255,0.

Текущий юлианский день JD = Шаблон:Num [[[:Шаблон:Очистить кэш]]].

История

Юлианский период

Юлианский период был предложен[2][3] Жозефом Скалигером для целей истории и хронологии. Поскольку историкам постоянно требуется работать с различными календарными системами и различными эпохами, Скалигер предложил хронологическую шкалу, к которой можно было бы приводить все исторические даты — юлианский период. Каждый год нумеровался тремя числами — индиктом (от 1 до 15), лунным циклом (от 1 до 19) и Шаблон:Не переведено 5 (от 1 до 28). На начало цикла 1 января 4713 года до н. э. все числа были равны 1. Длительность цикла в годах равняется 7980, что есть произведение 15·19·28. Через это время цикл повторяется. Конец первого юлианского периода придётся на 23 января 3268 года по григорианскому календарю.

От юлианского периода к юлианскому дню

В 1849 году для удобства астрономических расчётов Джон Гершель предложил все даты выражать через число дней, прошедших от начала цикла Скалигера. Началом дня Гершель выбрал полдень по меридиану Александрии, так как именно так отсчитывались дни в классическом Альмагесте Клавдия Птолемея. Использование полдня как границы суток удобно для датирования астрономических наблюдений, так как вся ночь попадает в один и тот же юлианский день.

К концу XIX века юлианский день постепенно начал использоваться в астрономической литературе. За начало дня обычно брали полдень по Гринвичскому меридиану, который в 1884 году получил статус международного.

Вычисления

Юлианскую дату можно применять для определения дня недели, для перевода дат одного календаря в даты другого, для определения промежутка времени между двумя датами и тому подобное.

Вычисление юлианской даты по дате календаря

Далее используются обозначения:

  • <math>\text{г}</math> — год. Для дат до нашей эры необходимо перевести год до н. э. в отрицательный год (например, 10 год до н. э. = −9 год);
  • <math>\text{мес}</math> — номер месяца, январь — 1, февраль — 2 и т. д.;
  • <math>\text{д}</math> — день месяца;
  • <math>\text{ч}</math> — часы от 0 до 23;
  • <math>\text{м}</math> — минуты от 0 до 59;
  • <math>\text{с}</math> — секунды от 0 до 59, могут содержать дробную часть;
  • <math>\text{JDN}</math> — номер юлианского дня (Шаблон:Lang-en), который начинается в полдень числа, для которого производятся вычисления;
  • <math>\text{JD}</math> — юлианская дата, содержащая дробную часть.

Вычисление номера юлианского дня (JDN) по дате григорианского календаря

Вначале нужно вычислить промежуточные коэффициенты:

<math>\begin{align}a & = \left\lfloor\frac{14 - \text{мес}}{12}\right\rfloor,\\y & = \text{г} + 4800 - a, \\m & = \text{мес} + 12a - 3. \end{align}</math>

После этого можно вычислить номер юлианского дня:

<math>\text{JDN} = \text{д} + \left\lfloor\frac{153m+2}{5}\right\rfloor +365y+\left\lfloor\frac{y}{4}\right\rfloor -\left\lfloor\frac{y}{100}\right\rfloor +\left\lfloor\frac{y}{400}\right\rfloor - 32045.</math>

Все деления целочисленные, то есть остатки деления отбрасываются (операция взятия целой части обозначена здесь и далее полуквадратными скобками вокруг дробей).

Формула справедлива для дат после 23 ноября −4713 года (4714 года до н. э.).

Вычисление номера юлианского дня (JDN) по дате юлианского календаря

Вначале нужно вычислить промежуточные коэффициенты (они те же, что и для григорианского календаря):

<math>\begin{align}
a &= \left\lfloor\frac{14 - \text{мес}}{12}\right\rfloor, \\
y &= \text{г} + 4800 - a, \\
m &= \text{мес} + 12a - 3.

\end{align}</math>

После этого можно вычислить номер юлианского дня:

<math>\text{JDN} = \text{д} + \left\lfloor\frac{153m + 2}{5}\right\rfloor + 365y + \left\lfloor\frac{y}{4}\right\rfloor - 32083.</math>

Для дат юлианского календаря существует также формула:

<math>\text{JDN} = 367 \cdot \text{г} - \left\lfloor\frac{7 \left(\text{г} + \left\lfloor\frac{\text{мес} + 9}{12}\right\rfloor \right)}{4}\right\rfloor + \left\lfloor\frac{275 \cdot \text{мес}}{9}\right\rfloor + \text{д} - 730530.</math>

Все операции деления — целочисленные, то есть остатки деления отбрасываются.

Формулы справедливы начиная с −4712 года (то есть для положительных значений JDN).

Вычисление юлианской даты (JD)

Для перехода к «полной» юлианской дате, содержащей дробную часть, можно воспользоваться формулой

<math>\text{JD} = \text{JDN} + \dfrac{\text{ч} - 12}{24} + \dfrac{\text{м}}{1440} + \dfrac{\text{с}}{86\,400}.</math>

При делении в этой формуле дробная часть не отбрасывается. Сутки не должны содержать високосной секунды (23:59:60).

Например, полдень (12 ч, 0 минут, 0 секунд) 1 января 2000 года соответствует JD = 2451545,0.

Вычисление дня недели по известной юлианской дате

День недели может быть вычислен как остаток от деления JDN на 7. При этом 0 соответствует понедельнику, 1 — вторнику и т. д.

JDN mod 7 0 1 2 3 4 5 6
День недели Пн Вт Ср Чт Пт Сб Вс

Программа для расчёта в Excel

    Sub Date_JDate()
    Dim dayy As Long, monthh As Long, yearr As Long, a As Long, y As Long, m As Long, jdate As Long
    Dim weekd
    weekd = Array("Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье")
    dayy = Cells(1, 1)
    monthh = Cells(1, 2)
    yearr = Cells(1, 3)
    a = Int((14 - monthh) / 12)
    y = yearr + 4800 - a
    m = monthh + 12 * a - 3
    jdate = dayy + Int((153 * m + 2) / 5) + Int(365 * y) + Int(y / 4) - Int(y / 100) + Int(y / 400) - 32045
    Cells(2, 1) = jdate
    Cells(3, 1) = weekd(jdate Mod 7)
    End Sub

Код для расчёта JD на Ruby для текущего момента

ruby -e 'puts (Time.now.getutc.to_f / 86400 + 2440587.5)'

Вычисление календарной даты по известной юлианской дате

Вычисление даты юлианского календаря по известному номеру юлианского дня (JDN)

Сначала нужно вычислить промежуточные коэффициенты:

<math>\begin{matrix}c & = & \text{JDN} + 32082\end{matrix}.</math>
<math>\begin{matrix}d & = & \left\lfloor\frac{4c + 3}{1461}\right\rfloor\end{matrix}.</math>
<math>\begin{matrix}e & = & c - \left\lfloor\frac{1461d}{4}\right\rfloor\end{matrix}.</math>
<math>\begin{matrix}m & = & \left\lfloor\frac{5e + 2}{153}\right\rfloor\end{matrix}.</math>

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

<math>\begin{matrix}\text{д} & = & e - \left\lfloor\frac{153m + 2}{5}\right\rfloor\ + 1\end{matrix}.</math>
<math>\begin{matrix}\text{мес} & = & m + 3 - 12\left\lfloor\frac{m}{10}\right\rfloor \end{matrix}.</math>
<math>\begin{matrix}\text{г} & = & d - 4800 + \left\lfloor\frac{m}{10}\right\rfloor \end{matrix}.</math>

Все деления целочисленные, дробная часть отбрасывается. Поэтому 12·(Шаблон:Math/10) в формуле для месяца не следует вычислять как (12Шаблон:Math)/10.

Вычисление даты григорианского календаря по известному номеру юлианского дня (JDN)

Сначала нужно вычислить промежуточные коэффициенты:

<math>\begin{matrix}a & = & \text{JDN} + 32044\end{matrix}.</math>
<math>\begin{matrix}b & = & \left\lfloor\frac{4a + 3}{146097}\right\rfloor \end{matrix}.</math>
<math>\begin{matrix}c & = & a - \left\lfloor\frac{146097b}{4}\right\rfloor \end{matrix}.</math>
<math>\begin{matrix}d & = & \left\lfloor\frac{4c + 3}{1461}\right\rfloor \end{matrix}.</math>
<math>\begin{matrix}e & = & c - \left\lfloor\frac{1461d}{4}\right\rfloor \end{matrix}.</math>
<math>\begin{matrix}m & = & \left\lfloor\frac{5e + 2}{153}\right\rfloor \end{matrix}.</math>

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

<math>\begin{matrix}\text{д} & = & e - \left\lfloor\frac{153m + 2}{5}\right\rfloor\ +1\end{matrix}.</math>
<math>\begin{matrix}\text{мес} & = & m + 3 - 12\left\lfloor\frac{m}{10}\right\rfloor \end{matrix}.</math>
<math>\begin{matrix}\text{г} & = & 100b + d - 4800 + \left\lfloor\frac{m}{10}\right\rfloor \end{matrix}.</math>

Все деления целочисленные, дробная часть отбрасывается. Поэтому 12·(Шаблон:Math/10) в формуле для месяца не следует вычислять как (12Шаблон:Math)/10.

Преобразование дат различных календарей

Преобразование UNIXTIME в дату и время григорианского календаря

Пример на языке СИ
void  unixtime_to_datetime ( unsigned long unixtime,
                             int *year, int *mon, int *mday, int *wday,
                             int *hour, int *min, int *sec,
                             unsigned long *jd, unsigned long *jdn )
{
        unsigned long time;
        unsigned long t1;
        unsigned long a;
        unsigned long b;
        unsigned long c;
        unsigned long d;
        unsigned long e;
        unsigned long m;

        *jd  = ((unixtime+43200)/(86400>>1)) + (2440587<<1) + 1;
        *jdn = *jd>>1;

        time = unixtime;   t1 = time/60;    *sec  = time - t1*60;
        time = t1;         t1 = time/60;    *min  = time - t1*60;
        time = t1;         t1 = time/24;    *hour = time - t1*24;

        *wday = *jdn%7;

        a = *jdn + 32044;
        b = (4*a+3)/146097;
        c = a - (146097*b)/4;
        d = (4*c+3)/1461;
        e = c - (1461*d)/4;
        m = (5*e+2)/153;
        *mday = e - (153*m+2)/5 + 1;
        *mon  = m + 3 - 12*(m/10);
        *year = 100*b + d - 4800 + (m/10);

        return;
}

Перевод дат юлианского календаря в даты григорианского календаря

  • Сначала нужно по дате юлианского календаря определить JDN;
  • Потом, зная JDN, определить день, месяц и год по григорианскому календарю.

Перевод дат григорианского календаря в даты юлианского календаря

  • Сначала нужно по дате григорианского календаря определить JDN;
  • Потом, зная JDN, определить день, месяц и год по юлианскому календарю.

Модификации и альтернативы юлианскому дню

Большое количество цифр в юлианском дне и смена дат в полдень во многих случаях неудобны, поэтому разработано большое количество систем счёта дней, аналогичных юлианскому дню.

Наименование Начало Расчёт Шаблон:Comment Примечание
Юлианская дата (JD) 12:00 1 января 4713 года до н. э., понедельник Ошибка выражения: неопознанный символ пунктуации «[»
Номер юлианского дня (JDN) 12:00 1 января 4713 года до н. э., понедельник (день № 0) JDN = floor(JD) Ошибка выражения: неопознанный символ пунктуации «[»
Сокращённая юлианская дата
(Шаблон:Lang-en, Шаблон:Lang-en2)
12:00 16 ноября 1858 года, вторник RJD = JD − 2400000 Ошибка выражения: неопознанный символ пунктуации «[» иногда используется астрономами
Модифицированная юлианская дата
(Шаблон:Lang-en, Шаблон:Lang-en2)
00:00 17 ноября 1858 года, среда MJD = JD − 2400000,5 Ошибка выражения: неопознанный символ пунктуации «[» введён SAO в 1957; сменяется в полночь
Округлённая юлианская дата
(Шаблон:Lang-en, Шаблон:Lang-en2)
00:00 24 мая 1968 года, пятница
00:00 10 ноября 1995 года, пятница
TJD = JD − 2440000,5
TJD = (JD − 0,5) mod 10000
Ошибка выражения: неопознанный символ пунктуации «[»
Ошибка выражения: неопознанный символ пунктуации «[»
— определение, введённое NASA[4]
— определение NIST
Дублинский юлианский день (Шаблон:Lang-en2) 12:00 31 декабря 1899 года, воскресенье DJD = JD − 2415020 Ошибка выражения: неопознанный символ пунктуации «[» введён IAU в 1955
Хронологический юлианский день
(Шаблон:Lang-en, Шаблон:Lang-en2)
00:00 1 января 4713 года до н. э., понедельник CJD = JD + 0,5 + часовой пояс Ошибка выражения: неопознанный символ пунктуации «[» (UT) свой для каждого часового пояса; дата меняется в полночь по местному времени
Лилианский день 00:00 15 октября 1582 года, пятница (день № 1) floor(JD − 2299160,5) Ошибка выражения: неопознанный символ пунктуации «[» количество дней, прошедших с введения григорианского календаря 15 октября 1582 года; дата меняется в полночь по универсальному времени
ANSI дата 00:00 1 января 1601 года, понедельник (день № 1) floor(JD − 2305812,5) Ошибка выражения: неопознанный символ пунктуации «[» по нему считаются даты COBOL
Rata Die 1 января 1 года, понедельник (день № 1) floor(JD − 1721424,5) Ошибка выражения: неопознанный символ пунктуации «[» счёт дней нашей эры по григорианскому календарю
UNIX-время 1 января 1970 года, четверг (JD − 2440587,5) × 86400 Ошибка выражения: неопознанный символ пунктуации «[» считается посекундно

Там, где требуются вычисления с точностью до минут и более, указывается, относительно какой системы приводится значение юлианского дня. Если это UTC, соответствующий юлианский день обозначают JDUTC, если это часто использующееся в астрономии эфемеридное время, юлианский день обозначают JED.

См. также

Примечания

Шаблон:Примечания

Литература

Ссылки

Шаблон:ВС

  1. В гражданском счёте первому году н. э. предшествует первый год до н. э. В астрономическом счёте первому году н. э. предшествует нулевой год.
  2. «Новое сочинение об исправлении хронологии» («Opus novum de emendatione temporum», Париж, 1583; исправленное издание — Франкфурт, 1593)
  3. «Сокровищница хронологии» («Thesaurus temporum», Лейден, 1606; Амстердам, 1629)
  4. Noerdlinger, 1995.