Простой способ получить Международное атомное время на Linux?

12

Моя система использует UTC для системных часов, которые я не особо хочу менять. Есть ли простой способ узнать текущее время TAI? (желательно инструмент командной строки или флаг)

JanKanis
источник
2
Хотите узнать разницу между UTC и TAI в информационных целях (например, это 12:30:13 UTC и 12:30:45 TAI) или вы хотите сбросить часы из внешнего источника, чтобы компенсировать накопленные различия на ваша локальная система?
Свен
1
На данный момент только в ознакомительных целях. И в случае, если я когда-нибудь захочу использовать его в программировании, поскольку TAI, в отличие от UTC, всегда монотонно возрастает
JanKanis

Ответы:

9

Идет работа над тем, чтобы предоставить Linux поддержку TAI. До этого вы можете использовать схему-часы для преобразования в TAI.

Дэвид Шварц
источник
Хм, так что в настоящее время нет легкой поддержки, но поддержка ядра идет, и тогда нам просто нужно подождать, пока пользовательские утилиты будут поддерживать опцию CLOCK_TAI.
JanKanis
2

Ответ с «правильным /» часовым поясом неверен. Он предназначен для преобразования системных часов, хранящихся в TAI-10, в UTC. Таким образом, следующее дает правильное время в UTC, GPS, LOREN и TAI [1]:

#!/bin/sh
echo -n "UTC:   "; TZ='UTC' date
echo -n "GPS:   "; TZ='UTC' date --date='TZ="../leaps/UTC" now -9 seconds'
echo -n "LORAN: "; TZ='UTC' date --date='TZ="../leaps/UTC" now'
echo -n "TAI:   "; TZ='UTC' date --date='TZ="../leaps/UTC" now 10 seconds'

Правильные часовые пояса могут быть в другом месте, TZ = "right / UTC", TZ = "../ zoneinfo-leaps / UTC". Замените «сейчас» на дату / время, которое вы хотите преобразовать - выходные данные верны для каждой даты после 1 января 1980 года.

Выход:

UTC:   Sun Oct 30 16:28:30 UTC 2016
GPS:   Sun Oct 30 16:28:47 UTC 2016
LORAN: Sun Oct 30 16:28:56 UTC 2016
TAI:   Sun Oct 30 16:29:06 UTC 2016

[1] http://www.leapsecond.com/java/gpsclock.htm

боб
источник
На самом деле вы правы относительно моего ответа. Как видно из скопированного примера, в 2013 году он работал. Однако сегодня, в 2017 году, у меня разница в 10 секунд между TAI и тем, что TZ='right/UTC' dateпечатает.
Гюйгенс
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: UTC настраивается относительно GPS и TAI при обновлении високосных секунд. TAI (Temps Atomique International, международная атомная шкала времени, основанная на непрерывном отсчете секунды SI). В 2019 году TAI опережает UTC на 37 секунд. TAI всегда опережает GPS на 19 секунд. Любая система, использующая это, должна быть обновлена, чтобы поддерживать "../leaps/UTC" в актуальном состоянии.
KevinM
1

Ответ устарел : см. Https://serverfault.com/a/812163/67419

Вы можете использовать часовой пояс «вправо /» для отображения приблизительного значения (<1 с) TAI.

Но вы должны убедиться, что ваш пакет с часовым поясом обновлен (например, tzdata в Ubuntu).

Код:

TZ='right/UTC' date

Пример:

$ date -u ; TZ='right/UTC' date
Mon Sep 16 13:36:21 UTC 2013
Mon Sep 16 13:35:56 UTC 2013

Причина амортизации: с 2013 года по сегодняшний день часовой пояс «вправо / UTC» соответствует TAI - 10 секунд, а не TAI. Или была ошибка.

Гюйгенс
источник
-1

Это легко сделать: просто запустите /usr/sbin/ntpdate pool.ntp.org;/sbin/hwclock --systohc один раз или добавьте его в cron. У меня это установлено ежедневно.

DSkowronski
источник
1
Лучше использовать что-то вроде pool.ntp.orgвместо фиксированного IP-адреса, чтобы лучше сбалансировать загрузку сервиса.
Свен
4
также авторы ntpdate помечают его как необслуживаемый, устаревший и устаревший. Людям рекомендуется использовать ntpd и ntp-wait вместо этого. Лучше, чтобы ваши часы всегда были правильными, чем если бы они внезапно периодически переходили на правильное время.
тушить
4
Я думаю, что NTP выдает время UTC, а не время TAI, которое я специально просил.
JanKanis