ВНИМАНИЕ! На форуме начался конкурс - астрофотография месяца ОКТЯБРЬ!
0 Пользователей и 1 Гость просматривают эту тему.
Юлианские дни (юлианские даты) - система непрерывной нумерации дней. Юлианский день равен числу суток прошедших с гринвичского полудня (12:00 GMT) 1 января 4713 г. до нашей эры до заданного момента. Юлианские дни принято обозначать буквами JD. Величина JD может принимать нецелые значения, в этом случае ее можно использовать для определения момента события (или измерения интервала времени между двумя событиями) с любой точностью. Юлианские дни широко используется в астрономии и хронологии. ...
Просто за основу Юлианского периода взято сочетание 3 циклов - 19-летнего цикла повторения лунных фаз по календарным дням, 28-летнего цикла повторения дней недели по датам календаря и 15-летнего цикла всесоюзной переписи населения (или как там у них в старину называлось). Точка отсчета - это как раз и есть день, когда все три цикла одновременно проходят через свое начало.Отсюда и "странные" формулы, сводящиеся в конечном итоге к вычислениям этих циклов - в статье К. Тондеринга - http://www.astronet.ru/db/msg/1182545/node4.html#SECTION004150000000000000000 - там же всё подробно.
... Это означает, что в полдень по Всемирному времени 1 января 2000 года начался JD 2451545.
Часто используются доли юлианской даты. Например, момент 15:00 Всемирного времени 1 января 2000 г. можно записать как JD 2451545.125.
Это можно вычислить таким образом: От 4713 г. до н.э. до 2000 г. прошло 6712 лет. В юлианском календаре год составляет 365.25 дней, поэтому 6712 лет соответствуют 6712 x 365.25 = 2451558 дней. Вычтем из этого 13 дней, на которые григорианский календарь опережает юлианский, и мы получим 2451545.
Вычислять JD для первого дня года все равно придется по этим же формулам – это и имеет смысл только для построения таблиц, чтобы не считать на каждый день. А компьютеру – какая разница? Он железный, посчитает.Существуют уже давно разработанные и проверенные процедуры. Зачем делать снова? Вот одна из, она была любезно предоставлена мне Почетным членом этого форума Анатолием....
А если прошлое не интересует, и нужно посчитать 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); }На мой взгляд, для понимания она совершенно прозрачна.
Есть момент времени виде структуры tm, которое функцией mktime(struct tm *)представляем в виде переменной формата time_t (на самом деле обычный long) - по определению (glibc manual) - кол-во секунд прошедших с 00:00:00 1 января 1970 UTC.
ОТКУДА БЕРЁТСЯ ЭТО РАСХОЖДЕНИЕ В 0.125 суток?!?
Дайте, пожалуйста, какой-нибудь простой алгоритм вычисления 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;