在 Linux 上获取国际原子时的简单方法?

在 Linux 上获取国际原子时的简单方法?

我的系统使用 UTC 作为系统时钟,我不太想更改它。有没有简单的方法可以获取当前 TAI 时间?(最好是命令行工具或标志)

答案1

工作正在进行中为 Linux 提供对 TAI 的原生支持。在此之前,您可以使用方案时钟转换为 TAI。

答案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"。将“now”替换为您要转换的日期/时间 - 输出对于 1980 年 1 月 1 日之后的每个日期都是正确的。

输出:

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

答案3

答案已被弃用: 看https://serverfault.com/a/812163/67419

您可以使用“正确/”时区来显示 TAI 的近似值(<1s)。

但您需要确保您的时区包是最新的(例如 Ubuntu 上的 tzdata)。

代码:

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 年到今天,时区“right/UTC”对应于 TAI - 10 秒,而不是 TAI。或者有一个错误。

答案4

操作很简单:只需运行 /usr/sbin/ntpdate pool.ntp.org;/sbin/hwclock --systohc 一次或将其添加到 cron 中。我将其设置为每日。

相关内容