如何根据 NTP 服务器获取当前日期而不在本地设置?

如何根据 NTP 服务器获取当前日期而不在本地设置?

我想使用 Linux 根据远程 NTP 服务器获取当前日期和时间。我不想因此更改本地时间;我只想获取根据本地时区调整的远程日期并打印出来。返回的日期必须符合以下标准:

  1. 它需要相当准确。
  2. 需要根据发出请求的本地系统的时区进行调整。
  3. 它需要以易于阅读或解释的方式进行格式化(标准日期格式,或自纪元以来的秒数)。

我尝试过的:

我可以调用ntpdate -q my.ntp.server并获取本地时间和服务器时间之间的偏移量,但它不会根据 NTP 服务器返回日期;它只返回偏移量和本地日期。

是否有一些简单的方法/命令可以用来说:“根据给定的 NTP 服务器打印出日期,并根据我当前的时区进行调整”?

答案1

这个 Perl 脚本应该可以满足您的需要(假设您不需要精确到 10 -6秒):

#!/usr/bin/perl -w

use strict;
use Math::Round;

## Get current date (epoch)
my $date=time();

## Get the seconds offset, rounding to the nearest second
my $ntp=nearest(0.1,`ntpdate -q $ARGV[0] | gawk '(\$NF~/sec/){print \$(NF-1)}'`); 

## Get the server's time
my $ntp_date=$date+$ntp;

## Convert to human readable and print
print "The time according to server $ARGV[0] is " . localtime($ntp_date) . "\n";

将脚本保存为 check_ntp.pl 并以服务器作为参数运行它:

perl ./check_ntp.pl my.ntp.server

相关内容