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


A A A A Автор Тема: Алгоритм преобразования Юлианского времени в Московское  (Прочитано 3279 раз)

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

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
Перед тем, как бросаться кодировать, хочу пообщаться с коллегами.  Должно быть, уже тыщи человек это всё делали до меня и все грабли известны.

Дано: JD — юлианский эфемеридный день, включая дробное число суток.
Требуется вычислить: Y, M, D, h, min, s — обычные московские гражданские дата и время: как в настольном календаре и газетах, исторических книгах, по радио «Маяк», телефону 100 или наручным часам.  Имея эти величины, каждый житель России (относительно) легко рассчитает время для своего города.

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

Диапазон входных значений JD хочется взять максимально широким.  Чтобы можно было вычислять не только будущее, но и дореволюционное время, и допетровское, и даже время до новой эры, включая изучение небесных явлений и космических катастроф времён динозавров.  >:D

На первый взгляд, придётся учитывать семь поправок (в порядке величины вклада):
  • Поскольку время и даты нам нужны гражданские, нулевого года нет.  Перед 1 годом н.э. идёт 1 год до н.э.
  • Все даты до перехода СССР на новый стиль (Y.M<1918.02), включая до н.э., рассчитываются по Юлианскому календарю.  Немного сурово для динозавров, но так принято среди историков.
  • Часовой пояс Москвы, ведь JD считается по Гринвичу.  Это +3 часа.
  • Декретное время.  Это +1 час.  Кстати, в какие даты Y-M-D надо его применять для Москвы?
  • Переход на летнее время.  Это +1 час летом.  Кстати, какие формулы начала и конца перехода на летнее время были в какие годы Y?  Когда вообще эта чехарда была принята?
  • Разницу между эфемеридным временем ET и универсальным временем UT, вызванную неравномерным вращением Земли.  Эмпирическая поправка в диапазоне плюс-минус минута.  Наилучшие таблицы и формулы интерполяции/экстраполяции ΔT найдены на сайте НАСА (англ.)
  • Секунды координации UTC-UT1 — как табличные, так и прогнозируемые. Кстати, в каком году Россия к соглашению присоединилась?

Просьба ответить на заданные вопросы и рассказать, если ещё где какие грабли знаете.  Литература есть.  На выложенные в Сеть статьи ссылаться можете, но здесь хочется живого общения.

UPDATE. Т.к. эфемеридное время ET сейчас представляет из себя лишь историческую ценность, предлагается для шкалы юлианского дня JD использовать земное время TT — его преемника по МАСу.  В пределах доступной точности это роли не играет, но теорию упрощает.

TT было синхронизировано с ET первого января 1977 г. из ретроспективы 1 января 1958 года, когда  ΔT = ET − UT = ET − TAI = 32.184 и эта разница TT с атомным временем TAI может быть принята за константу.  Т.к. ΔT меняется, TAI и UT уже к 1977 году сильно разошлись, зато разница координированного UTC (и, следовательно, искомого TMSK) с атомным TAI = TT − 32.184 теперь всегда известна и дискретна (равна целому количеству секунд).
« Последнее редактирование: 08 Янв 2010 [12:28:37] от ath »
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Оффлайн Ink

  • ****
  • Сообщений: 430
  • Благодарностей: 10
    • Сообщения от Ink
Разделите задачу на две части: перевод эфемеридного юлианского дня JD в гринвичское время и перевод гринвичского времени в московское/омское/камчатское.

Если я не ошибаюсь, +1 декретный уже входит в нынешние +3 для Москвы.  Т.е. для некоторых периодов нужно брать +3, а для некоторых -- +2.

Возможно, вся информация по часовым поясам, переводу на летнее время и обратно содержится в пакете tzdata.  Я всё собираюсь посмотреть, как её оттуда выковорять, но так и не посмотрел.

Что касается литературы, то ищите "Астрономия на персональном компьютере" (Монтенбрук, Пфлегер) и "Astronomical Algorithms" (J. Mees, на англ. языке).

Оффлайн SWN

  • *****
  • Сообщений: 2 752
  • Благодарностей: 109
  • И вся печаль проходит, когда глядишь на звезды
    • Skype - Astrowlad
    • Сообщения от SWN
"Астрономия на персональном компьютере" (Монтенбрук, Пфлегер)
http://narod.ru/disk/16528435000/Montenbruck_Pfleger-Astronomiya_na_personalnom_komputere_4ed_2002.djvu.html
SW2001-CG-5, МТО-1000, БПЦ20х60

Оффлайн Ink

  • ****
  • Сообщений: 430
  • Благодарностей: 10
    • Сообщения от Ink
Угу, это я сканировал.  Но вот здесь эта книга в лучшем качестве и с диском: тынц. :)

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
Разделите задачу на две части: перевод эфемеридного юлианского дня JD в гринвичское время и перевод гринвичского времени в московское/омское/камчатское.
Не получится переводить в омское напрямую, т.к. Гринвич не подчиняется российским законам.  А наша власть творит с календарём и московским временем, что хочет.  Например, меня интересует точная дата перехода России на UTC, координированное время.

Зато когда московское время получено, омское и камчатское получается элементарно.  Т.к. они, юридически и фактически, рассчитываются относительно московского.  Там могут быть свои тонкости (например, Кемеровская область), но даже эти тонкости касаются расхождения с московским временем и только.

Если я не ошибаюсь, +1 декретный уже входит в нынешние +3 для Москвы.  Т.е. для некоторых периодов нужно брать +3, а для некоторых -- +2.
Сейчас Москва живёт UTC+3, а летом UTC+4.  Это фактически, то есть уже с учётом декретного времени.

Декретное время всё равно придётся учитывать, когда рассчитываешь время для прошлых лет.  Т.к. оно не всегда было.

Возможно, вся информация по часовым поясам, переводу на летнее время и обратно содержится в пакете tzdata.  Я всё собираюсь посмотреть, как её оттуда выковорять, но так и не посмотрел.
Ой, да ладно.  Будут эти gov'ы в русской и советской истории копаться!  Опять же, вряд ли там есть эфемеридная коррекция, связанная с непостоянством вращения Земли.

Но за ссылку спасибо, посмотрю.

Что касается литературы, то ищите "Астрономия на персональном компьютере" (Монтенбрук, Пфлегер) и "Astronomical Algorithms" (J. Mees, на англ. языке).
Да, эти книги есть и соответствующие главы прочитаны.  Просто перед использованием информации оттуда решил узнать что-нибудь дополнительное от тех, кто эту работу уже проделывал.

Угу, это я сканировал.  Но вот здесь эта книга в лучшем качестве и с диском: тынц. :)
О, новое издание!  Спасибо, посмотрю. […some time passes…] ааа!  Эти дядьки на C++ перешли!  ;D ;D  А, вроде, взрослые люди.  ???  Зато переводчики перешли на термин юлианский день.  Чтож, будем использовать.

Также в новом издании значения ET-UT даны для 1995 и 2000 года.  Неплохо.  Хотя точность и лучше, чем у Meeus'а, шаг в 5 лет для интерполяции остаётся крупноват.  С точностью до секунды даже для XX века не получается.  :(
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Оффлайн Nebesov

  • *****
  • Сообщений: 997
  • Благодарностей: 37
  • SkyLark
    • Сообщения от Nebesov
На самом деле это довольно сложно, особенно последний этап - перевод в общеупотребимое "гражданское" время.

Летнее время в СССР начали вводить с 1981 года. До 1985 включительно оно действовало строго с 01.04 до 30.09. С 1986 года начали переводить часы в ночь на воскресенье: последнее воскресенье марта и сентября. С 1997 года возврат на зимнее время перенесли с сентября на октябрь.
Но между этим было еще и "смутное время" 1991-1992 :)
В 1991-м решили отменить "декретное время", поэтому весной стрелки не трогали, а осенью перевели на час назад - ближе к Европе :). Но что-то кому-то не понравилось, и уже 19 января 1992 года "декретное время" вернулось.

Если с событиями 30-летней давности еще как-то можно разобраться, то с более ранними проблем больше. Дело в том, что "декретное" (больше похожее на "летнее") время вводилось декретами Совнаркома и до 1930-го года, просто с 1930-го оно стало действовать постоянно. Но даты этих переходов надо искать по каждому году отдельно. Если найдете - мне это тоже интересно :)

До 1917-го года в каждой местности России действовало свое время, близкое к среднему солнечному. То есть "дореволюционное" Московское время опережало современное поясное примерно на полчаса.

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

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
Большое спасибо за информацию!  Она пригодится для составления программы.  Жаль лишь, что приведены только даты, без точного времени перевода стрелок.  Но восстановлю, кудаж деваться.

Если с событиями 30-летней давности еще как-то можно разобраться, то с более ранними проблем больше. Дело в том, что "декретное" (больше похожее на "летнее") время вводилось декретами Совнаркома и до 1930-го года, просто с 1930-го оно стало действовать постоянно. Но даты этих переходов надо искать по каждому году отдельно. Если найдете - мне это тоже интересно :)
Найду, здесь же и опубликую.  Пока нашёл лишь табличку в Википедии (не самый надёжный источник), вот в этой статье:
http://ru.wikipedia.org/wiki/Часовые_пояса_России

Для других мест сложностей еще больше, т.к. границы часовых поясов много раз перекраивались.
На другие пока не замахиваюсь.  С московским временем бы разобраться, уже хорошо.
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Маринер-9

  • Гость
« Последнее редактирование: 19 Янв 2011 [17:27:02] от Маринер-9 »

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
А собственно, для каких целей создаётся такая программа?
Надо определиться.

Для расчёта движения и вращения Луны, планет, их спутников и т.д. нужно линейное время.  JD вполне себе линейное и общепринятое время.

Для наблюдений удобнее использовать гражданское время и общепринятый календарь.  Их же удобно использовать при анализе небесных явлений прошлого и самостоятельном вычислений будущих небесных явлений.  Следовательно, неплохо бы иметь инструмент для перевода JD в TMSK (и обратно).

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

Просто перед достижением этой цели мне интересно побеседовать с людьми, которые эту работу уже выполняли или задумывались на эту тему.  Советы и данные Nebesov'а полезны.

  Есть ведь ещё и земное динамическое время (TDT) и  барицентрическое динамическое время (TDB), в которых учитываются эффекты теории относительности, связанные с течением времени на поверхности массивного объекта, вращающегося объекта (на вращающемся время течёт медленнее, да ещё в зависимости от широты!).
   Вообще, а нужно ли вдаваться в такие дебри?

Конечно же, вдаваться нужно.  Но лишь если это улучшит точность расчётов.

Сейчас, насколько я понимаю, точность расчётов ограничивает неравномерность вращения Земли, которую наука не объяснила и предсказывать не умеет.  Экспериментальные данные Монтенбруком и Пфлегером приведены, и на этом спасибо (хотя хотелось бы иметь более щедрую таблицу).  Учёт разницы UTC-UT оправдан, если мы решим задачу интерполяции-экстраполяции с точностью порядка секунды.

А какой порядок поправки даст учёт релятивистских эффектов и TDT/TDB?  Если они дадут аналитические формулы для неравномерности вращения Земли, это будет архиполезно!  ::)

Что же касается зависимости хода времени от широты, то TMSK отсчитывается от UTC, всемирного времени.  Поэтому указанный релятивистской эффект компенсируется тем, что московская гражданская секунда не соответствует 9 192 631 770 периодам излучения цезия-133, а бесстыдно подстраивается под международную, всегда соответствуя 186 400 единицы JD.  ;D
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Оффлайн Nebesov

  • *****
  • Сообщений: 997
  • Благодарностей: 37
  • SkyLark
    • Сообщения от Nebesov
Большое спасибо за информацию!  Она пригодится для составления программы.  Жаль лишь, что приведены только даты, без точного времени перевода стрелок.  Но восстановлю, кудаж деваться.
Насколько помню, стрелки на летнее время всегда переводили в 2 часа ночи (на час вперед), а обратно - в 3 часа.

Если с событиями 30-летней давности еще как-то можно разобраться, то с более ранними проблем больше. Дело в том, что "декретное" (больше похожее на "летнее") время вводилось декретами Совнаркома и до 1930-го года, просто с 1930-го оно стало действовать постоянно. Но даты этих переходов надо искать по каждому году отдельно. Если найдете - мне это тоже интересно :)
Найду, здесь же и опубликую. 
Если в сети не найдете - придется искать в библиотеке старые газеты тех времен.

По поводу Delta T - вот хорошая ссылка:
http://eclipse.gsfc.nasa.gov/SEhelp/deltaT.html
Не плыви по течению. Не плыви против течения. Плыви туда, куда тебе нужно.

Оффлайн Nebesov

  • *****
  • Сообщений: 997
  • Благодарностей: 37
  • SkyLark
    • Сообщения от Nebesov
Поставленная же мною цель проста и заключается в точнейшем (учитывая современное развитие науки) решении задачи, сформулированной в первом сообщении.  Эта цель достижима, один вечер работы.
Цель достижима. Год подготовки (поиск данных) + один вечер программирования :)
Удачи!
Не плыви по течению. Не плыви против течения. Плыви туда, куда тебе нужно.

Маринер-9

  • Гость
« Последнее редактирование: 19 Янв 2011 [17:27:29] от Маринер-9 »

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
По поводу Delta T - вот хорошая ссылка:
http://eclipse.gsfc.nasa.gov/SEhelp/deltaT.html
Ух!  Прямо не ссылка, а сокровище.  А там ещё ссылки…  Огромное спасибо.  Хорошо, что я на АстроФорум обратился прежде, чем по бумажной литературе что-то кодировать.

  На поверхности Земли и вдали от от неё атомные часы разойдутся, если я не ошибаюсь,
на 1 секунду за 44 года. То есть при программировании бортового компьютера КА
это надо учитывать.
Нет.  Пока речь идёт о Земле и астрономических наблюдениях, сделанных с её поверхности в разное время и разные эпохи — включая ближайшие годы.

Для космоса, вероятно, надо что-то поумнее придумать, чем JD — величину, завязанную на земные дни.
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
Цель достижима. Год подготовки (поиск данных) + один вечер программирования :)
Удачи!

Да, где-то так.  Я не тороплюсь, в таких проектах качество важнее скорости.  Спасибо!
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
Интересно.

Насколько я понял из изучения сайта НАСА, ΔT имеет смысл вычислять до 1972 года (или когда там Россия вступила в этот UTC-заговор), а также экстраполировать для будущего (от времени разработки программы).  В промежутке же преобразование будет идеально точным, нужно просто учитывать накопление официально изданных «високосных» секунд.

Так что учёт релятивистских эффектов не такая уж и проигрышная затея. ;D
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Маринер-9

  • Гость
« Последнее редактирование: 19 Янв 2011 [17:27:53] от Маринер-9 »

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
Уважаемый Маринер-9,

так ваше участие в дискуссии, к сожалению, было не слишком полезнее «спортлото».  Вначале вы открыли нам не слишком скрываемые перечисленными выше авторами сведения о существовании TDT и TDB, введённых МАСом в 1976-91 годах.  Потом намекнули, что Tmsk-UTC может быть не ровно 3 или 4 часа из-за релятивистских эффектов, влияющих на длительность атомной секунды.

К сожалению, свою интересную точку зрения доводить до формул или просто отстаивать вы отказываетесь, т.к. формат форума слишком узок для вас. (Несмотря на то, что известно множество замечательных и довольно сложных проектов, разработанных именно с использованием интернет-форумов.)

А вот мне было бы интересно, что произойдёт, когда накапливающаяся релятивистская разница Tmsk-UTC начнёт быть заметной не только вам, но и окружающим.  Кто тогда подстроит свои часы под другого, Москва или IERS?

Точность перевода действительно хотелось бы повысить.  Т.к. 1 секунда разницы это целых 15 угловых секунд на небе.  Если мы рассчитываем покрытия, такая небрежность в пересчёте времени заметна.  Но на данный момент ничто из высказанного вами, увы, не помогает в решении поставленной задачи.

А что было бы полезным?  Например, сейчас я ищу ответ на вопрос, чему равна разница ET-UTC (не путать с ET-UT).  Если будет известна точная цифра хотя бы для одной даты, это даст абсолютную точность расчёта для всех годов, когда Россия использовала координированное время.  Дата перехода России на координированное время тоже будет полезной для искомого алгоритма.
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Маринер-9

  • Гость
« Последнее редактирование: 19 Янв 2011 [17:28:16] от Маринер-9 »

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
Маринер-9

Спасибо за добрые пожелания.  За прошедшие 10 лет действительно появилось много нового, связанного с UTC и ΔT.  А, на днях, грозят ещё большие изменения.

На мой взгляд, лучшую точность преобразования дадут не эмпирические квадратичные формулы (как это сделано в RedShift), а табличка ΔT(JD) и линейные интерполяции.  По крайней мере в диапазоне от 1955 года и до перехода на UTC.

Существует ли ссылка на ваши исходные тексты?  Вполне возможно, что часть кода окажется полезной для искомого алгоритма.
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Оффлайн TMonax

  • Новичок
  • *
  • Сообщений: 2
  • Благодарностей: 0
    • Сообщения от TMonax
Приветствую. когда ещё недавно учился в универе, занимался данной темой.
Сейчас представлю алгоритмы)

Дату в номер дня юлианского периода:
 
procedure jday(d, m, y: integer): real;
begin
  Result := ( 1461 * ( y + 4800 + ( m - 14 ) / 12)) / 4 + ( 367 * ( m - 2 - 12 * (( m - 14 ) / 12))) / 12 - 3 * (( y + 4900 + ( m - 14 ) / 12) / 100) / 4) + d - 32075;
end;   

Обратно:
 
если jd - юлианский день, то наша дата d, m, y высчитываются так:
 L := jd + 68569;
 n := ( 4 * L ) / 146097;
 L := L - ( 146097 * n + 3 ) / 4;
 i := ( 4000 * ( L + 1 ) ) / 1461001;
 L := L - ( 1461 * i ) / 4 + 31;
 j := ( 80 * L ) / 2447;
 d := L - ( 2447 * j ) / 80;       // день
 L := j / 11;
 m := j + 2 - ( 12 * L );          // месяц
 y := 100 * ( n - 49 ) + i + L;  // год

А вот второй алгоритм:
  jd := jd-1721119;
  y := (4*jd-1)/146097;
  d := (4*y-1-146097*y)/4;
  jd := (4*d+3)/1461;
  d := (4*d+7-1461*jd)/4;
  m := (5*d-3)/153;
  d := (5*d+2-153*m)/5;
  y := 100*y+jd;
  if m<10 then
    m := m+3
  else
  begin
    m := m-9;
    y := y+1
  end;

Оба эти алгоритма работают по разным принципа чуток, осталось выяснить какой из них более точен)

Вот, а время Вам прийдётя самому прикрутить. На всякий случай привожу удобные алгоритмы преобразования времени которые могут пригодиться (просто у юлианского вроде время же тоже в чиле как бы целом):
Пробразование времени суток в длинное целое число:
TimeToLong(hour, minute, seconds: integer): int64
begin
  Result := (hour*60+minute)*60+seconds;
end;

Преобразование целого числа во время суток(код си++)
t: int64;
  s = t%60;
  t = t/60;
  m = t%60;
  h = t/60;

Надеюсь это всё поможет)