显示尽可能准确的时间

显示尽可能准确的时间

我想将手表上的时间设置为尽可能接近实际的同步当前时间。

是否有一个命令可以重复显示当前时间(精确到秒),并使用 NTP 进行校准,以便我可以正确设置手表?

答案1

如果您的系统与 ntp 同步(检查ntpq -crv状态中的“sync_ntp”和/或/usr/sbin/ntptime代码“0(正常)”和 PLL 或 FLL,但状态不是 UNSYNC),那么date朋友们都会返回准确的时间,估计是关闭“偏移”值(通常是几毫秒,比您设置手表要好得多)

在我有一个可以自行设置的脚本之前,我曾经使用这样的 Perl 脚本来设置我的手表:

#!/usr/bin/perl
use strict;
use utf8;

use Time::HiRes qw(gettimeofday usleep);
binmode STDOUT, ':utf8';

# Set up start conditions
my ($timer, $residual) = gettimeofday;
usleep(1e6 - $residual);
$residual = 0;
++$timer;
my $correction = 0;

while (1) {
        usleep(1e6 + $residual + $correction);
        ++$timer;
        my ($m_s, $m_µs) = gettimeofday;
        $correction = (1e6*($timer - $m_s) - $m_µs);
        $residual += $correction;

        if ($correction < 5_000 && $correction > -5_000) {
                # if within 5ms
                print "\a  ".localtime($timer)."\t${correction} µs\n";
        } else {
                print "x ".localtime($timer)."\t${correction} µs\n";
        }

}

在终端中运行它。它尝试每秒显示一次时间,如果在 5 毫秒内到达,则会发出终端蜂鸣声。当然,说实话,发出嘟嘟声的延迟可能超过 5 毫秒,这也是您的大脑识别并响应嘟嘟声所需的时间。

(我想你可以添加一些东西,计算机首先让你在听到蜂鸣声时按下一个键来测试你的反应时间,然后用它来提前发出蜂鸣声以抵消你的反应时间。)

答案2

ntpd 应该跟上 NTP 服务器的全球基础设施,并且它具有用于补偿/计算/考虑通过互联网的 UDP 数据包的丢失/RTT 并通过层传播时间的算法。层 1 NTP 服务器通常连接到原子钟。日期对于分辨率 1 来说绰绰有余。

相关内容