Какие значения по умолчанию приняты (скажем, 1721119) для расчета григорианского года, месяца, дня из юлианского дня

Большое и большое спасибо заранее!

Следующий фрагмент кода представляет собой функцию, которая дает мне год, месяц и день для данного юлианского дня.

Подскажите, пожалуйста, что означают константы здесь? Я могу найти этот код по всей сети, но никто не объясняет значения по умолчанию, взятые здесь. Также, если кто-то может объяснить, что будет делать функция.

Предположим, что значение, которое я передаю для JD, равно 2456447 ..

VOID GetGregorianDate(LONG JD, PWORD Year, PWORD Month, PWORD Day)
{
LONG j, y, d, m;
j = JD - 1721119;            //what is this value - 1721119 (may be related to day.. but how ?)
y = (4 * j - 1) / 146097;    //what is this value - 146097 (may be related to year.. but how ?)
j = 4 * j - 1 - 146097 * y;
d = j / 4;
j = (4 * d + 3) / 1461;        // ?
d = 4 * d + 3 - 1461 * j;
d = (d + 4) / 4;
m = (5 * d - 3) / 153;        // ?
d = 5 * d - 3 - 153 * m;
d = (d + 5) / 5;
y = 100 * y + j;
if (m < 10)
{
m = m + 3;
}
else
{
m = m - 9;
y = y + 1;
}

*Year   = (WORD) y;
*Month  = (WORD) m;
*Day    = (WORD) d;
}

-1

Решение

Это просто артефакты григорианского календаря и произвольной даты, выбранной в качестве начала юлианской эпохи.

  • 1721119 — это смещение от JD 0 до начала марта 1BC (поскольку не было 0AD); вычитая это дает количество дней с тех пор. Март выбран в качестве «начала» года, так что високосные дни наступают в «конце», что упрощает арифметику.
  • 146097 — это количество дней в четырех столетиях, то есть время, которое требуется для повторения цикла високосных лет.
  • 1461 — число дней в четырех годах (цикл високосного года).
  • 153 — количество дней в 5 последовательных месяцах, чередующихся между 31 и 30 днями (март-июль или август-декабрь).
  • Различные дополнения и вычитания 3 и 9 должны восстановить «начало» года до января.

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]