我想使用 Linux 根据远程 NTP 服务器获取当前日期和时间。我不想因此更改本地时间;我只想获取根据本地时区调整的远程日期并打印出来。返回的日期必须符合以下标准:
- 它需要相当准确。
- 需要根据发出请求的本地系统的时区进行调整。
- 它需要以易于阅读或解释的方式进行格式化(标准日期格式,或自纪元以来的秒数)。
我尝试过的:
我可以调用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