UT, UTC, Юлианский день

Тема в разделе "Общие вопросы", создана пользователем Александр Устинов, 16 янв 2009.

  1. Александр Устинов

    Александр Устинов Форумчанин

    Для расчета движения спутников необходимо пересчитать координаты из инерциальной системы координат в неинерциальную. Поэтому возникло несколько вопросов, связанных с временными шкалами в астрономии и геодезии.
    Как вычислить Юлианский день, если имеется дата в виде 08267.96153743?
    На сайте IERS поправка (UT1-UTC) значится равной 0.1 s. Она всегда положительная?
     
  2. stout

    stout Форумчанин

    Наиболее правильный, "астрономический" алгоритм вычисления JD по дате грегорианского календаря был когда-то (ноябрь 1964 г.) опубликован в CACM - http://pmyers.pcug.org.au/IndexedMultipleYearCalendar/Calgo_199.PDF Pascal версия дана ниже
    Код:
    function JulianDay(y, m, d: WORD): Longint;
    
    { procedure JDAY from CACM Alorithm 199                                  }
    { Computes Julian day number for any Gregorian Calendar date             }
    { GIVEN:   y - year                                                      }
    {          m - month                                                     }
    {          d - day                                                       }
    { RETURNS: Julian day number (astronomically, for the day                }
    {          beginning at noon) on the given date.                         }
    
    var
      mm, yy, cent, years: Longint;
    begin
      if m > 2 then
      begin
        mm := m - 3;
        yy := y
      end
      else
      begin
        mm := m + 9;
        yy := y - 1
      end;
      cent := yy div 100;
      years := yy mod 100;
    
      JulianDay := (146097 * cent) div 4 + (1461 * years) div 4 +
        (153 * mm + 2) div 5 + d + 1721119
    end; { JulianDay }
    Вы эту дату имели ввиду? А то ваша запись не соответствует стандарту ISO 8601
    Допишу её и выложу здесь.

    В соответствии с последними резолюциями, она не должна превышать 0.9 s (когда-то было 0.7 s ) по абсолютной величине. Теоретически, она может быть и отрицательной. Фантастически великолепная страничка Steve Allen's по шкалам времени http://www.ucolick.org/~sla/leapsecs/timescales.html
    и его же UTC might be redefined without Leap Seconds http://www.ucolick.org/~sla/leapsecs/
    Чуть попрще - http://stjarnhimlen.se/comp/time.html
     
  3. Александр Устинов

    Александр Устинов Форумчанин

    Спасибо за ответ, Александр Юрьевич.
    Я нашел примерно такой же алгоритм, но мне надо получить Юлианскую дату, зная год и день года. Понимаю, что можно перевести это дело в год, месяц и день месяца, но я думал может существует формула и для такого случая.
    У меня на входе дата в таком формате: 08267.96153743.
    Я, честно говоря, сомневаюсь в том, что это UTC, так как в описании указано, что это UT, наверное, подразумевается UTC.
     
  4. stout

    stout Форумчанин

    Нет, всё-таки мало у вас было астрономии. День года - это всего навсего день от 0-го января. Поэтому в вашем случае JD: = JulianDay(year, 1, 0)+DayOfYear; ::tongue24.gif::
    Пока вы отвечали, я правил своё сообщение. Ваша дата не соответствует стандарту на записи дат, но это не беда. Конкретно для вашей даты JD: = JulianDay(2008, 1, 0)+267.96153743;
    А если функцию описать как
    function JulianDay(y, m: WORD; d:Extended): Extended;
    и заменить последний оператор на
    Код:
    JulianDay := ((146097 * cent) div 4 + (1461 * years) div 4 +
        (153 * mm + 2) div 5  + 1721119) + d;
    то JD: = JulianDay(2008, 1, 267.96153743) ::smile24.gif::
     
  5. Александр Устинов

    Александр Устинов Форумчанин

    Если я плохо соображаю, это не значит, что у меня было мало астрономии, это, в некотором смысле, побочные последствия того, что я, как раз, учился по специальности "астромогеодезия":)
    Спасибо, а я тут на один день не ошибусь?
    У меня все намного проще в программе, без всяких там функций, подпрограмм, все в одном, как думаю, так и пишу, в столбик:)

    Такую дату используют для данных по спутникам GIOVE-A и GIOVE-B GALILEO.
     
  6. stout

    stout Форумчанин

    Помятуя о фортране - вот вам ссылка на фортран-прогаммы SOFA - Standards Of Fundamental Astronomy http://www.iau-sofa.rl.ac.uk/
     
  7. Александр Устинов

    Александр Устинов Форумчанин

    Спасибо, может когда-нибудь пойму, как этим пользоваться:)

    В моем случае yy = 8 - 1?
    Не пойму, что значит эта строчка:
    years := yy mod 100;
     
  8. Александр Устинов

    Александр Устинов Форумчанин

    Не получается...
    Не так что-то делаю, наверное.
     
  9. stout

    stout Форумчанин

    Нет, yy = 2008 - 1
    остаток от деления. MOD(x,y) = x - INT(x/y)*y
    На фортране - встроенная функция. Можно записать MOD(YY,100).
     
  10. Александр Устинов

    Александр Устинов Форумчанин

    Спасибо, в моем случае, уже есть отдельный год 08, так что делить не надо. cent = 20, years = 7 получается, mm = 10, d = 267.96153743. Считаю, получается что-то не то...
    P.S. Но вчера обнаружил проблему поважнее в моем коде, Runge-Kutta не правильно считает...
     
  11. Александр Устинов

    Александр Устинов Форумчанин

    Попробовал вот этот алгоритм: http://krutov.org/algorithms/julianday/
    Сравниваю со Юлианской датой с сайта SOPAC, расхождение в 0.5.
    Юлианский день начинается в 12 часов?
     
  12. stout

    stout Форумчанин

    см. начало, 1 абзац "Основные замечания" http://krutov.org/algorithms/julianday/ ::tongue24.gif::
    Вообщем, неплохая страничка, только зря автор использует термин "среднее Гринвичское время" (GMT). Астрономы давно от него отказались. Оно осталось только на обывательском уровне для демонстрации своей "учёности". Да и по поводу const 30.6 есть небольшое замечание, но это так, мелочи. Алгоритм известный и верный. Особенно удобен, если необходимо вычисляять JD то по юлианскому календарю, то - по грегорианскому. Насчет 30.6 лучшее объяснение, которое я встречал в интернете - http://www.amsat.org/amsat/articles/g3ruh/100.html
    З.Ы. А известно ли вам, какой день в феврале является дополнительным (високосным)?
     
  13. Александр Устинов

    Александр Устинов Форумчанин

    Спасибо за ответ, stout.
    "По традиции принято считать, что Юлианский день начинается в полдень по среднему Гринвичскому времени"
    Я хотел уточнить, может есть разные подходы к этому вопросу.
    А SOPAC почему так считает или для поиска данных достаточно так считать Юлианский день?
    А у Вас есть свои соображения на этот счет?
     
  14. stout

    stout Форумчанин

    Насколько я помню, на SOPAC используется модифицированная юлианская дата MJD=JD-2400000.5
    В этом вопросе я могу только присоедениться к мнению авторитетнейших людей в области хронологии, утверждающих, что это 24 февраля.
    Кстати, 23 февраля ("канун") отмечались терминалии - праздник в честь Термина - бога межей и пограничных столбов, считавшихся священными. (Чем не дата для празднования дня землемера? ::biggrin24.gif:: )
    До календарной реформы Гая Юлия Цезаря римское летоисчисление было настолько запутанным, что когда читаешь об нем, тебя не покидает стойкое ощущение, что придумал его настоящий шизофреник. В основе календаря был 8-летний цикл, в году было 12 или 13 месяцев и он мог длиться 355, 377 или 378 дней. Ошибки копились и множились. Таким образом накануне реформы в 45 году до нашей эры пришлось увеличить длительность римского года (46 год до нашей эры) до 445 дней. ::blink.gif::
    Добавочный день в юлианском календаре вставлялся между 23 и 24 февраля и носил название bis sextum Kalendae Mart - дважды шестой до мартовских калед. (т.е. до 1 марта). Позже, год с таким днем получил название bissextus, по-русски - високосный.
     
  15. Александр Устинов

    Александр Устинов Форумчанин

    Точно! Туплю:)
    Merci bien, stout!
     
  16. Александр Устинов

    Александр Устинов Форумчанин

    Мне говорят, что это неправильно, что эта поправка не равна 0.1 с. Ищу на сайте IERS, но не нахожу. Подскажите, svp, какую величину сейчас имеет поправка (UT1-UTC). Merci d'avance.
     
  17. Александр Устинов

    Александр Устинов Форумчанин

  18. Александр Устинов

    Александр Устинов Форумчанин

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

    rasta Форумчанин

    Это конечно не алгоритм,но может чем-то поможет.
     

    Вложения:

    • TIMESYS.tar.gz
      Размер файла:
      22,3 КБ
      Просмотров:
      69
  20. Александр Устинов

    Александр Устинов Форумчанин

    Спасибо, эта программка у меня есть.
    Есть тут кое-что:
    http://krutov.org/algorithms/julianday/
    буду разбираться.
     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление