Клещи между эпохой Unix и эпохой GPS

Каково количество секундных тиков между эпохой времени Unix (01 января 1970 года) и эпохой GPS (06 января 1980 года)?

Я видел несколько ответов из нескольких источников в Интернете. Один лагерь утверждает, что ответ 315964800, другой утверждает, что он 315964819. Я всегда думал, что это 315964800, но теперь я не уверен.

Я только что нашел, что мой базовый уровень программного обеспечения использует 315964819 в течение последних восьми лет. Мне трудно понять, как это могло быть 19 секунд, и никто не заметил этого, когда мы интегрировали наши встроенные устройства с другими устройствами.

Я думаю, что тот, кто положил 315964819 в базовый уровень кода, ошибочно использовал смещение TAI (19 секунд).

Из того, что я понимаю, время Unix не включает секунды прыжка, что указывает на то, что 315964800 - это количество тиков между двумя эпохами. Затем я думаю о том, как время Unix обрабатывает второй прыжок. Он просто повторяет подсчет тика, когда вставлен второй прыжок, и между 1970 и 1980 годами было вставлено 19 скачкообразных секунд... Я начинаю сомневаться в том, что вопрос о повторных клещах. Я так не думаю, но кто-то из этой истории кода так думал, и, похоже, это сработало....

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

Может кто-нибудь авторитетный, пожалуйста, зайдите сюда?

315964800 лагерь

315964819 лагерь

Также обратите внимание, что я только спрашиваю о эпохе Unix для эпохи GPS. Я уверен, что у нас есть прыжки секунд с тех пор, как наступила эпоха GPS.

Ответ 1

Различные значения, которые вы указали, вызваны смешением смещения с 1970 по 1980 год со скачкообразными секундами.
Правильное значение смещения равно 315964800 секунд.

Объяснение:

Время UTC и GPS отклоняются (в среднем) каждые 18 месяцев на одну дополнительную секунду. Это называется секундой прыжка, введенной в базу времени UTC, необходимой для изменения изменений вращения Земли.

Время GPS не регулируется секундомерами.

В настоящее время (2013) есть смещение 16s:
Время GPS-UTC = 16 секунд

Unix time - это формат времени, не являющийся ссылкой на время. Он представляет собой миллисекунды (или секунды) с 1.1.1970 UTC. В идеале ваше системное время синхронизируется с UTC с помощью TimeServer (NTP).

Чтобы преобразовать и получить смещение, вы должны использовать фиксированное смещение: (6.1.1980 UTC - 1.1.1970 UTC)

и THEN добавьте текущее значение GPS для отклонения UTC (в настоящее время 16 секунд). Например, настройте это значение или прочитайте текущее смещение от устройства GPS (они знают разницу между временем по Гринвичу и временем GPS)

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

Эта java-программа:

SimpleDateFormat df = new SimpleDateFormat();
df.setTimeZone(TimeZone.getTimeZone("UTC"));

Date x = df.parse("1.1.1970 00:00:00");
Date y = df.parse("6.1.1980 00:00:00");

long diff = y.getTime() - x.getTime();
long diffSec = diff / 1000;

System.out.println("diffSec= " + diffSec);

Выводит это значение:

diffSec = 315964800

Итак, это правильное смещение между 1.1.1970 UTC и 6.1.1980 UTC, когда началось время GPS. Затем вам нужно исправить еще 16 секунд, которые были введены с 6.1.1980, и сегодня, чтобы вычислить время GPS текущего времени UTC.

Ответ 2

Каково количество секундных тиков между эпохой времени Unix (01 января 1970 года) и эпохой GPS (06 января 1980 года)?

 

Есть как минимум два возможных ответа:

  • Что такое отметка времени POSIX за период 1980-01-06 UTC? Ответ: 315964800 (точно), в Python:

    from datetime import datetime, timedelta
    print((datetime(1980,1,6) - datetime(1970,1,1)) // timedelta(seconds=1))
    

    Это число секунд SI между датами , не считая секунд прыжка. Другими словами, код показывает, сколько секунд "UT1" (~ 1/86400 средне-солнечного дня) прошло между событиями.

    UTC, шкалы времени GPS гасятся в секундах СИ. UTC "забывает" секунды прыжка, и поэтому фактическое количество секунд SI между датами немного больше, чем временная метка POSIX.

    315964800 не является правильным ответом, если вы хотите найти прошедшие секунды

  • Сколько SI секунд прошло между 1970-01-01 UTC и 1980-01-06 UTC? Ответ: 315964811 (приблизительно).

Чтобы ответить на второй вопрос, вам нужно знать, сколько интеркалярных секунд прыжка было вставлено между двумя датами (конвертировать UTC в International Atomic Time (TAI)):

#!/usr/bin/env python3
from datetime import datetime, timedelta

tai_posix_epoch = datetime(1970, 1, 1) + timedelta(seconds=8, microseconds=82)
tai_gps_epoch = datetime(1980, 1, 6) + timedelta(seconds=19)
print(round((tai_gps_epoch - tai_posix_epoch) / timedelta(seconds=1)))

Разница между TAI и временем GPS постоянна в течение 10 с от наносекунд.

Время между 1970 и 1972 годами (когда был введен UTC) немного нечеткое; разница TAI-UTC не является целым числом секунд в этот период:

from decimal import Decimal as D

MJD_1970_01_01 = 40587
dAT_1970_01_01 = D("4.213170") + (MJD_1970_01_01 - 39126) * D("0.002592")
# -> delta(AT) = TAI - UTC = Decimal('8.000082') # 8 seconds, 82 microseconds

Здесь картина, показывающая связь между UT1, UTC и тайм-шкалами TAI за эти годы: UTC-TAI Каждый шаг - это прыжок второй, начиная с TAI - UTC = 10s в 1972-01-01. По состоянию на 1 июля 2015 года было введено 26 положительных секунд прыжка.


315964819 временная метка может быть объяснена, если используется 1970-01-01 00:00:00 TAI эпоха:

print(datetime(1970, 1, 1) + timedelta(seconds=315964819)) # TAI
# 1980-01-06 00:00:19 TAI or 1980-01-06 00:00:00 UTC

i.e, точно 315964819 SI секунд, прошедших между 1970-01-01 00:00:00 TAI и 1980-01-06 00:00:00 UTC (примечание: даты выражаются с использованием разных временных масштабов).

"right" timezones использует 1970-01-01 00:00:10 TAI эпоху (уведомление: 10 секунд), и поэтому соответствующая временная метка для эпохи GPS (1980-01-06 00:00:00 UTC) 315964809 (не 315964819). Здесь краткое описание разницы между "правильными" и временными метками POSIX:

"Правильные" файлы в базе данных tz (zoneinfo) имеют тонкие отличие от стандарта POSIX. POSIX требует, чтобы система значение часов time_t представляет количество секунд без скачка с 1970-01-01. Это то же самое, что требуется, чтобы секунды POSIX были средними солнечные секунды UT, а не атомные секунды, которые UTC считал с тех пор 1972-01-01.

"Правильные" файлы zoneinfo утверждают, что системное значение часов time_t представляют фактическое количество секунд в международном масштабе утвержденная шкала времени вещания с 1970-01-01 гг. В результате значение oftime_t, который ожидается в "правильных" файлах zoneinfo, больше чем значение time_t, заданное POSIX. Разница в значения time_t - количество секунд прыжка, которые были введенных в международно утвержденную шкалу времени вещания.. год 2015 различие составляет 26 секунд. подчеркнуть мой


Может кто-нибудь авторитетный, пожалуйста, зайдите сюда?

БЮЛЛЕТЕНЬ IERS C (данные, которые я использовал выше) является авторитетом на секундах скачка (и поэтому (косвенно) на разницу между шкалами времени UTC и GPS).

Ответ 3

Думаю, я в третьем лагере:)
Позвольте называть его так: 2,904,548,141,415,381,930 "периодов [...] атома цезия 133, измеренного при 0 градусах Кельвина на геоиде. (укажите или возьмите несколько сотен миллионов периодов в зависимости от того, какое определение TAI/SI вы используете)

Краткий ответ:

Это зависит от того, какие временные масштабы (и какие определения этих временных масштабов) вы используете.

315964809 в секундах TAI (определение 1977 года) и, следовательно, UTC секунд
315964800 в UNIX секундах
(оба равны друг другу, но ТОЛЬКО между указанными датами и оба соответствуют 2,904,548,141,415,381,930 "периодам [...]" )
Обратите внимание на, что секунды UNIX воспроизводят одну и ту же секунду после завершения второго тайма UTC, так что UTC секунд, 2012-06-30 23:59:60 UTC и 2012-07- 01 00:00:00 UTC, оба были представлены отметкой UNIX 1341100800.

Подробный ответ:

Использование секунд TAI

Несмотря на то, что на самом деле это не так, допустим, что все тайсы TAI до 1977 года по-прежнему точно совпадают с определением секунд TAI/SI 1977/1997. Пусть также предположим, что

"Временная эпоха Unix (01 января 1970 г.)" в "Время времени GPS" (06 января 1980 г.) "

ты имеешь в виду

1970-01-01 00:00:10 TAI до 1980-01-06 00:00:19 TAI

в этом случае было бы
(((365дней/год * 10 лет) + 2 високосных дня + 5 дней) * 86400 TAI секунд/день) + 9 секунд TAI
= 315964809 TAI секунд

Использование секунд UNIX
Несмотря на то, что на самом деле это не так, допустим, что продолжительность второго UTC до 1977 года по-прежнему в точности равна определению секунды TAI/SI 1977/1997.

Пусть также предположим, что

"Временная эпоха Unix (01 января 1970 г.)" в "Время времени GPS" (06 января 1980 г.) "

ты имеешь в виду

1970-01-01 00:00:00 UTC to 1980-01-06 00:00:00 UTC
и что время UNIX пропускает вторую секунду после завершения второго прыжка

в этом случае было бы
(((365дней/год * 10 лет) + 2 високосных дня + 5 дней) * 86400 секунд/день) + 9 прыжков секунд - 9 секундных перерывов unix
= 315964800 UNIX секунд

Относительно "Периоды [...]"
A 1977/1997 TAI/SI второй - это то, что было использовано для получения 315964809 секунд 9 192 631 770 периодов каждый = 2,904,548,141,415,381,930 периодов. Второй период 1997 года равен длине 9 192 631 770 периодов излучения, соответствующих переходу между двумя сверхтонкими уровнями основного состояния покоящегося цезия-133 атома при температуре 0 К. В 1977 году определение TAI измеряет SI секунд на геоиде.

Ответ 4

вернитесь к оригинальному вопросу, "Временная эпоха Unix (01 января 1970 г.)" в "эпоху GPS времени" (06 января 1980 г.) ", поэтому эпоха 315964800, 315964819 -" эпоха TAI "в" эпоху GPS ". что означает 315964819 = 315964800 + 19. поэтому значение эпохи, которое вы используете в коде, действительно зависит от того, какую временную эпоху вы используете.