Телескопы покупают здесь


A A A A Автор Тема: JD  (Прочитано 6306 раз)

0 Пользователей и 1 Гость просматривают эту тему.

hoarfrost

  • Гость
JD
« : 03 Окт 2004 [11:22:17] »
JD

Захотел разобраться с тем, как расчитывать JD. Нашёл несколько формул, понятных и не очень, несколько объяснений того, что это такое и почему надо так,... и в результате я понял, что надобно всё-таки разузнать следующее:

1. Как считают время в астрономии - с нулевым годом, предшествующим 1 г. н. э. или без него?

2. Откуда начинается отсчёт JD? С 12 часов 1 января 4713 г до н. э по историческому способу счёта годов (т. е. -4712 по астрономическому), или же -4713 г по астрономическому отсчёту годов?

3. Что такое JD - количество дней прошедших после начала отсчёта, или номер очередного дня? То есть, если, например JD=5, то это означает, что пять дней уже прошло, или то, что идёт пятый день?

4. Сколько дней в 1 г н. э. и нулевом годе, (т. е. 1 г до н. э.)?

5. Как считать JD, и почему "так"?

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

Для даты до нашей эры:

JD = 4712*365 + [4713/4] - 0.5 - year*365 - [year/4] + Days + (day - 1) + hours/24;

Для даты нашей эры, но по юлианскому календарю:
JD = 4713*365 + [4713/4] - 0.5 + (year - 1)*365 + [(year - 1)/4] + Days + (day - 1) + hours/24;

Для даты нашей эры, но по григорианскому календарю:
JD = 4713*365 + [4713/4] - 0.5 + (year - 1)*365 + [(year - 1)/4] + Days + (day - 1) - [(year - 1500)/100] + [(year - 1200)/400] - 10 + hours/24;

где в качестве JD вычисляется количество дней (с долей дня), прошедших после начала отсчёта, Days - Количество дней прошедших в году (с учётом 29 февраля, если оно уже прошло), переменная year для даты до н.э. до вычисления становится положительной, а дата до н. э. задаётся с учётом нулевого года

Ежели кому формулы привычнее в виде C\C++, то вот:

Result = 4712.0*365.0 + floor(4713/4) - 0.5 - fabs(year)*365.0 - floor(fabs(year/4)) + DaysInMonths + static_cast<double>(day - 1) + static_cast<double>(hour)/24.0;
Result = 4713.0*365.0 + floor(4713/4) - 0.5 + (year - 1)*365.0 + floor((year - 1)/4) + DaysInMonths + static_cast<double>(day - 1) + static_cast<double>(hour)/24.0;
Result = 4713.0*365.0 + floor(4713/4) - 0.5 + (year - 1)*365.0 + floor((year - 1)/4) + DaysInMonths + static_cast<double>(day - 1) + static_cast<double>(hour)/24.0 - floor((year - 1500)/100) + floor(((year) - 1200)/400) - 10.0;

(В том же порядке соответственно).

Для 12 часов 3 октября получается 2453281.00

Alexander Wolf

  • Гость
Re:JD
« Ответ #1 : 03 Окт 2004 [11:35:21] »
Юлианские дни (юлианские даты) - система непрерывной нумерации дней. Юлианский день равен числу суток прошедших с гринвичского полудня (12:00 GMT) 1 января 4713 г. до нашей эры до заданного момента. Юлианские дни принято обозначать буквами JD. Величина JD может принимать нецелые значения, в этом случае ее можно использовать для определения момента события (или измерения интервала времени между двумя событиями) с любой точностью. Юлианские дни широко используется в астрономии и хронологии.

Начало III тысячелетия - полночь с 31 декабря 2000 года на 1 января 2001 года - приходится на JD = 2,451,910.5 (то есть первая половина суток 1 января 2001 года относится к юлианскому дню JD=2,451,910, а вторая - к JD=2,491,911).

Юлианские дни были введены в обращение Джоном Гершелем (John F. Hershel) в 1849 году в книге "Очерки по Астрономии" ("Outlines of Astronomy") на основе идей, разработанный известным историком и хронологом Джозефом Скалигером (см. Юлианский цикл).

Система юлианских дней обладает двумя недостатками:
  • Юлианский день начинается в полдень, что не совпадает с принятым сегодня порядком гражданского времяисчисления, согласно которому сутки начинаются в полночь.
  • Величина JD, соответствующая современной эпохе, очень велика, причем старшие разряды этого числа на обозримых интервалах времени не изменяются.

Первая из указанных проблем была разрешена введением модифицированных юлианских дней (MJD), вторая - введением усеченных юлианских дат с более близким к современности началом отсчета (см. Усеченные юлианские даты и Лилианский день).

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

http://www.astronet.ru/db/msg/1172746
« Последнее редактирование: 03 Окт 2004 [11:39:44] от Александр Вольф »

hoarfrost

  • Гость
Re:JD
« Ответ #2 : 03 Окт 2004 [12:06:23] »
Юлианские дни (юлианские даты) - система непрерывной нумерации дней. Юлианский день равен числу суток прошедших с гринвичского полудня (12:00 GMT) 1 января 4713 г. до нашей эры до заданного момента. Юлианские дни принято обозначать буквами JD. Величина JD может принимать нецелые значения, в этом случае ее можно использовать для определения момента события (или измерения интервала времени между двумя событиями) с любой точностью. Юлианские дни широко используется в астрономии и хронологии. ...

Спасибо за дополнительную информацию! Но вот как их считать?

Alexander Wolf

  • Гость
Re:JD
« Ответ #3 : 03 Окт 2004 [12:10:37] »
Алгоритмы расчетов JD приведены на многих астросайтах и сайтах-энциклопедиях, как, к примеру, тут: http://scienceworld.wolfram.com/astronomy/JulianDate.html

hoarfrost

  • Гость
Re:JD
« Ответ #4 : 03 Окт 2004 [13:50:06] »
Большое спасибо за ссылки! Я нашёл практически все ответы, кроме, к сожалению, :( ,самого главного - мне не удалось понять, почему JD надо вычислять именно так. По какому принципу строятся все те формулы, что я видел.

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

an1440

  • Гость
Re:JD
« Ответ #5 : 03 Окт 2004 [15:36:10] »
Просто за основу Юлианского периода взято сочетание 3 циклов - 19-летнего цикла повторения лунных фаз по календарным дням, 28-летнего цикла повторения дней недели по датам календаря и 15-летнего цикла всесоюзной переписи населения (или как там у них в старину называлось). Точка отсчета - это как раз и есть день, когда все три цикла одновременно проходят через свое начало.
Отсюда и "странные" формулы, сводящиеся в конечном итоге к вычислениям этих циклов - в статье К. Тондеринга - http://www.astronet.ru/db/msg/1182545/node4.html#SECTION004150000000000000000 - там же всё подробно.
« Последнее редактирование: 03 Окт 2004 [16:28:20] от an1440 »

hoarfrost

  • Гость
Re:JD
« Ответ #6 : 03 Окт 2004 [19:22:19] »
Просто за основу Юлианского периода взято сочетание 3 циклов - 19-летнего цикла повторения лунных фаз по календарным дням, 28-летнего цикла повторения дней недели по датам календаря и 15-летнего цикла всесоюзной переписи населения (или как там у них в старину называлось). Точка отсчета - это как раз и есть день, когда все три цикла одновременно проходят через свое начало.
Отсюда и "странные" формулы, сводящиеся в конечном итоге к вычислениям этих циклов - в статье К. Тондеринга - http://www.astronet.ru/db/msg/1182545/node4.html#SECTION004150000000000000000 - там же всё подробно.


Спасибо за ссылку, там есть много чего интересного!

В данной статье меня весьма смутили несколько моментов, с которыми я сталкиваюсь постоянно:

1. В ней есть две фразы, разделённые всёго лишь одним абзацем:

Цитата
... Это означает, что в полдень по Всемирному времени 1 января 2000 года начался JD 2451545.

а через один абзац:

Цитата
Часто используются доли юлианской даты. Например, момент 15:00 Всемирного времени 1 января 2000 г. можно записать как JD 2451545.125.

Так в 12 часов 1 января 2000 года JD 2451545 начинается или уже прошёл? Или же запись JD 2451545.125 следует читать не "прошло ...45 целых и 125 тысячных дня", а "идёт ...45 день и 0.125 часть его уже прошла". В таблице вековых дней указано, что JD(2000.01.01) = 2 451 544.

2. Абзац, стоящий между приводимыми выше фразами:
Цитата
Это можно вычислить таким образом: От 4713 г. до н.э. до 2000 г. прошло 6712 лет. В юлианском календаре год составляет 365.25 дней, поэтому 6712 лет соответствуют 6712 x 365.25 = 2451558 дней. Вычтем из этого 13 дней, на которые григорианский календарь опережает юлианский, и мы получим 2451545.

А можно ли для определения JD для дня, посчитать сначала JD для 12 часов 1 января соответствующего года, так, как показано в этом абзаце, а потом прибавить количество дней прошеших с начала года (т. е. с 12 часов 1 января)? Насколько я понял, при определении дней по таблицам именно такой способ и используется.

Если можно, то почему далее, для посчёта JD для любой даты, идут такие "странные формулы"?

А если нельзя, то из-за чего?

3. Ещё один момент - для подсчёта дней, в прошедших годах просто берут и складывают 4713 и (year - 1), получая выражение 4712 + year, которое затем умножают на 365.25. А можно ли так делать в общем случае?

Ведь когда 365.25 умножается, например, на 6712, то по сути дела, полагается, что отсчёт високосных четырёхлетий идёт от начала отсчёта, то есть от 1 января -4712 года (или 4713 г до н. э.). Как правильнее считать количество високосных лет: 4713/4 + (year - 1)/4 или же (4712 + year)/4? Для 2004 года например, в первом варианте получается 1178 + 500 = 1678, а во втором 6716/4 = 1679!

То есть, как я понимаю такую ситуацию, вопрос упирается в количество дней в 0 годе (или в 1 г н.э.?), в котором при подсчёте (4712 + year) полагается, по сути, 366 дней, а во втором варианте - 365.

4. В таблице годовых поправок для поправки 01 года указано 366, для 02 - 731. Значит в 0 году всё-таки 366 дней?

-------------------------------------------------------------
Приношу свои извинения тем, кто прочитал это сообщение до его последней правки за ужасные ошибки, в нём содержавшиеся...  :-[
« Последнее редактирование: 03 Окт 2004 [22:29:36] от hoarfrost »

hoarfrost

  • Гость
Re:JD
« Ответ #7 : 03 Окт 2004 [21:19:37] »
Кажется разобрался!

Результат - количество прошедших дней, для "до н.э.", "н.э." и "н.э. - григорианский календарь" выглядит следующим образом:

JD = -0.5 + (4712 + year)*365 + (4712 + year)/4 + DaysInMonths + (day - 1) + hour/24.0;
JD = -0.5 + (4713 + year - 1)*365 + (4712 + year - 1)/4 + 1 + DaysInMonths + (day - 1) + hour/24.0;
JD = -0.5 + (4713 + year - 1)*365 + (4712 + year - 1)/4 + 1 + DaysInMonths + (day - 1) + hour/24.0  - [(year - 1 - 1500)/100] + [(year - 1 - 1200)/400] - 10.0;

где year - год, задаваемый астрономическим способом счёта годов, и "до нашей эры" отрицательный, а DayInMonths учитывают 29 февраля, если оно уже прошло.

Результаты соответствуют датам, получаемым по таблицам, но(!) вековые дни получаются на 1 меньше.
Насколько я понял, в таблицах они сделаны на 1 меньше специально, чтобы первому дню месяца не сопоставлять 0, второму - 1 и т. д.

Ничем иным значение 4382 сопоставленное -4700 году, в то время как в -4712..-4701 годах (включительно) прошло 4383 дня, я не могу. (Считая их, я полагал, что 0 год был високосным).


В виде формул C\C++:

Result = -0.5 + static_cast<double>((4712 + year)*365 + (4712 + year)/4 + DaysInMonths + (day - 1)) + static_cast<double>(hour)/24.0;
Result = -0.5 + static_cast<double>((4713 + year - 1)*365 + (4712 + year - 1)/4 + 1 + DaysInMonths + (day - 1)) + static_cast<double>(hour)/24.0;
Result = -0.5 + static_cast<double>((4713 + year - 1)*365 + (4712 + year - 1)/4 + 1 + DaysInMonths + (day - 1)) + static_cast<double>(hour)/24.0  - floor((year - 1 - 1500)/100) + floor((year - 1 - 1200)/400) - 10.0;

 :) ;) :D ;D

an1440

  • Гость
Re:JD
« Ответ #8 : 04 Окт 2004 [05:38:50] »
Вычислять JD для первого дня года все равно придется по этим же формулам – это и имеет смысл только для построения таблиц, чтобы не считать на каждый день. А компьютеру – какая разница? Он железный, посчитает.
Существуют уже давно разработанные и проверенные процедуры. Зачем делать снова? Вот одна из, она была любезно предоставлена мне Почетным членом этого форума Анатолием.
(в нотации TURBO-BASIC 1.00 от BORLAND.  "ABS" – абсолютная величина, "FIX" – отбрасывание дробной части)
------------------------
def fnJDg (D, IM,IY)
local  JN, IYY, IMM, IA, IB, IS, GRDAT, JD
   IF ( IM > 2 )  THEN
       IYY = IY
       IMM = IM + 1
   ELSE
       IYY = IY - 1
       IMM = IM + 13
   END if
   IF ( IYY = 0 ) THEN
       IS = 1
   ELSE
       IS  = fix ( IYY / ABS ( IYY ) )
       IYY = ABS ( IYY )
   END if
   GRDAT = IYY * 10000.0 + IMM * 100.0 + D
   IF ( IS > 0 )  THEN
       IB = 0
       IF ( GRDAT >= 15821115.0 )  THEN
          IA = fix ( IYY / 100 ) * IS
          IB = 2 - IA + fix ( ABS ( IA ) / 4 ) * IS
       END if
       JD = 1720994.5 + D + fix( 365.25  * IYY ) + fix(  30.6001 * IMM ) + IB
   ELSE
       JD = 1720994.5 + D - fix( 365.25  * IYY + 0.75 ) +fix(  30.6001 * IMM )
   end if
   fnJDg=JD
END def
---------------------------
Здесь JD вычисляется на любую дату Юлианского периода (день может быть дробным, причем значения следует определить как числа с максимальной точностью, чтобы на фоне тысячелетий ловились секунды и их доли). Переключение календаря с Юлианского на Григорианский принято 5 -> 15 октября 1582 года.

Оффлайн Денис Никитин

  • *****
  • Сообщений: 3 760
  • Благодарностей: 74
  • Keep your eyes open!
    • Skype - n.dennis
    • Сообщения от Денис Никитин
Re:JD
« Ответ #9 : 06 Окт 2004 [13:41:46] »
Здравствуйте,

Если Вы пишете программу которая должна расчитывать дату по Юлианскому календарю. То можете покопаться в документации к Вашему компиллеру. Я пишу в C++Builder, в документации к VCL библиотеке есть описание модуля DateUtils.hpp в котором в частности определены функции DataTimeToJulianDate и обратная функция JulianDateToDataTime. То же самое естессно есть и в Дельфи и в Киликсе и т.д.. То есть легким движением руки, брюки превращаются....и не надо долго думать, всего пару строк кода. На счет Микросовтовских вижуалов не в курсе.

Это на случай если нужен результат, а понимание процесса можно отложить на потом.

Еще одна возможность поискать в сети готовые DLL с функциями. Например кажется Cartes du Ciel идет с открытым кодом.

Оффлайн AstroNick

  • *****
  • Сообщений: 3 138
  • Благодарностей: 122
  • Дорогу осилит идущий!
    • Сообщения от AstroNick
    • Домашняя страничка "Остров сокровищ"
Re:JD
« Ответ #10 : 06 Окт 2004 [19:16:09] »
А если прошлое не интересует, и нужно посчитать JD для дат 21 века и далее, то задача кардинально упрощается, в моём исполнении на JScript она выглядит так:

function cal_jd(day,mon,year)
 {
  //Номер дня с 1.01.2001=1; для годoв >= 2001; JD=d+2451910
  var mday=new Array(0,31,59,90,120,151,181,212,243,273,304,334);
  var vis;
  if(Math.floor(year/4)*4==year&&mon>2) vis=1;
  else vis=0;
  var d=(year-2001)*365+Math.floor((year-2001)/4)+mday[mon-1]+day+vis;
  return(d);
 }

На мой взгляд, для понимания она совершенно прозрачна.
Александрович Николай, Москва - юг Подмосковья, АстроТоп России, 300-мм F/6 Ньютон + Celestron Advanced C8-SGT в обсерватории под Москвой, ТАЛ-1, DeepSky 25x100, SW1201+Coronado PST, Canon EOS 6D

hoarfrost

  • Гость
Re:JD
« Ответ #11 : 07 Окт 2004 [08:50:35] »
Вычислять JD для первого дня года все равно придется по этим же формулам – это и имеет смысл только для построения таблиц, чтобы не считать на каждый день. А компьютеру – какая разница? Он железный, посчитает.
Существуют уже давно разработанные и проверенные процедуры. Зачем делать снова? Вот одна из, она была любезно предоставлена мне Почетным членом этого форума Анатолием.
...

Спасибо за ещё один алгоритм!

Проблема была не в том, чтобы найти алгоритм, считающий JD. (Взять хотя-бы алгоритм для MJD от Монтенбрука и прибавлять 2400000.5). Я хотел найти алгоритм, а ещё лучше - формулу, которая была бы легко понимаемой. "Стандартный" алгоритм, конечно, эффективней. Но получать выигрыш в  десятитысячные (а то и меньше) доли секунды за счёт усложнения алгоритма? Зачем? (Если, конечно, эта формула не будет использоваться в очень интенсивных вычислениях, основная доля временных затрат которых будет сосредотачиваться на ней).

Мне намного удобнее сделать один раз такую формулу, вывод которой я смогу вспомнить и проверить, взглянув на неё пару раз. Выводить формулу JD, конечно, наверное не потребуется, но а вдруг потребуется посчитать дни, прошедшие с какой-либо другой даты? Или составить примерно похожий алгоритм, но со своими особенностями? Понятность программы, и "дружелюбность" её алгоритмов, в данном случае может играть главную роль.

Ну и к тому же, я хотел понять, как всё-таки "устроено" исчисление времени. Интересно было  :).

Кстати, а вы не знаете, как выводится приведённый вами алгоритм?

hoarfrost

  • Гость
Re:JD
« Ответ #12 : 07 Окт 2004 [08:57:59] »
А если прошлое не интересует, и нужно посчитать JD для дат 21 века и далее, то задача кардинально упрощается, в моём исполнении на JScript она выглядит так:

function cal_jd(day,mon,year)
 {
  //Номер дня с 1.01.2001=1; для годoв >= 2001; JD=d+2451910
  var mday=new Array(0,31,59,90,120,151,181,212,243,273,304,334);
  var vis;
  if(Math.floor(year/4)*4==year&&mon>2) vis=1;
  else vis=0;
  var d=(year-2001)*365+Math.floor((year-2001)/4)+mday[mon-1]+day+vis;
  return(d);
 }

На мой взгляд, для понимания она совершенно прозрачна.

Да! Прозрачна! Да и у меня получилась практически такая же (если убрать там где надо 4713 или 4712). За исключением, быть может того, что я считаю прошедшее время, а не номер дня.
« Последнее редактирование: 07 Окт 2004 [08:59:50] от hoarfrost »

Оффлайн kirx

  • *****
  • Сообщений: 597
  • Благодарностей: 68
  • Я за мир, любовь и анархию!
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от kirx
Re:JD
« Ответ #13 : 07 Окт 2004 [12:06:18] »
Недавно столкнулся с рассчётом JD. Пишу на С. Есть момент времени виде структуры  tm, которое функцией mktime(struct tm *)представляем в виде переменной формата time_t (на самом деле обычный long) - по определению (glibc manual) - кол-во секунд прошедших с 00:00:00 1 января 1970 UTC. Однако, получается, что 00:00:00 1 января 1970 UTC соответствует JD2440587.375 а не 2440587.5 как должно быть по определению!
В итоге считая по формуле
JD=(double)Vrema/3600/24+0.125+2440587.5
Получаем правильный результат. Но, люди, спать спокойно не могу, ОТКУДА БЕРЁТСЯ ЭТО РАСХОЖДЕНИЕ В 0.125 суток?!?
Plz, подскажите, если кто знает!


Оффлайн AstroNick

  • *****
  • Сообщений: 3 138
  • Благодарностей: 122
  • Дорогу осилит идущий!
    • Сообщения от AstroNick
    • Домашняя страничка "Остров сокровищ"
Re:JD
« Ответ #14 : 07 Окт 2004 [12:47:30] »
Цитата
Есть момент времени виде структуры  tm, которое функцией mktime(struct tm *)представляем в виде переменной формата time_t (на самом деле обычный long) - по определению (glibc manual) - кол-во секунд прошедших с 00:00:00 1 января 1970 UTC.
Цитата
ОТКУДА БЕРЁТСЯ ЭТО РАСХОЖДЕНИЕ В 0.125 суток?!?

В описании пакета <TIME.H> прямо сказано, что mktime преобразует местное время, заданное структурой *tp, в календарное...
Да и если учесть, что 0.125 суток = 3 часа, то логично предположить, что эта функция берёт не всемирное время, а местное, отсюда и расхождение. У Вас компьютерное время случайно не UT+3ч?
Александрович Николай, Москва - юг Подмосковья, АстроТоп России, 300-мм F/6 Ньютон + Celestron Advanced C8-SGT в обсерватории под Москвой, ТАЛ-1, DeepSky 25x100, SW1201+Coronado PST, Canon EOS 6D

Оффлайн kirx

  • *****
  • Сообщений: 597
  • Благодарностей: 68
  • Я за мир, любовь и анархию!
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от kirx
Re:JD
« Ответ #15 : 07 Окт 2004 [13:01:28] »
Спасибо!  :D А я то, дурак, гадал...

Оффлайн елVIс

  • *****
  • Сообщений: 1 361
  • Благодарностей: 15
  • Мне нравится этот форум!
    • Сообщения от елVIс
Re:JD
« Ответ #16 : 19 Окт 2004 [15:10:32] »
 :D :D :D
Уже ответил Astronick.
Я с точно такой же штукой мучился - пока сообразил


 
ТАЛ-150ПМ, Coronado PST, Алькор, Pentax IstD с ЗМ-5СА и МТО-1000

Оффлайн ched

  • Первооткрыватель астероидов
  • *****
  • Сообщений: 2 751
  • Благодарностей: 18
    • Skype - chestd
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от ched
Re: JD
« Ответ #17 : 09 Июл 2005 [19:03:28] »
Дайте, пожалуйста, какой-нибудь простой алгоритм вычисления JD, если дан год, месяц и день. Например, вот так  2005 07 09.45341

hoarfrost

  • Гость
Re: JD
« Ответ #18 : 09 Июл 2005 [20:45:08] »
Дайте, пожалуйста, какой-нибудь простой алгоритм вычисления JD, если дан год, месяц и день. Например, вот так  2005 07 09.45341

:)

Не совсем понятно, что значит простой... По моему - проще всего взять приводившиеся ниже три формулы:
Цитата
JD = -0.5 + (4712 + year)*365 + (4712 + year)/4 + DaysInMonths + (day - 1) + hour/24.0;
JD = -0.5 + (4713 + year - 1)*365 + (4712 + year - 1)/4 + 1 + DaysInMonths + (day - 1) + hour/24.0;
JD = -0.5 + (4713 + year - 1)*365 + (4712 + year - 1)/4 + 1 + DaysInMonths + (day - 1) + hour/24.0  - [(year - 1 - 1500)/100] + [(year - 1 - 1200)/400] - 10.0;

Особенно простыми они кажуты после того, как выведешь их сам. ;D

Первая - для дат до нашей эры. Вторая - нашей эры, но только до 4 октября 1582 года (до перехода на григорианский календарь). Третья - начиная с 15 октября 1582 года (дат между 4 и 15, естественно, быть не должно).

Есть ещё один важный момент - при исчислении дат используется нулевой год! Он стоит перед 1 г. н. э. и 1 г.до н. э. Сначала я не понимал, для чего он вообще понадобился, но когда начал выводить формулы, то понял, насколько это хорошая идея. Причём нулевой год - високосный.

Если в формулах что-то будет непонятно - спрашивай. Но полезнее всего их вывести. Тем более что вывод весьма прост. ;)

Alexander Wolf

  • Гость
Re: JD
« Ответ #19 : 10 Июл 2005 [14:13:51] »
Дайте, пожалуйста, какой-нибудь простой алгоритм вычисления JD, если дан год, месяц и день. Например, вот так  2005 07 09.45341

Так все JD & MJD так и рассчитываются ;)