6

Я хочу получить текущую дату и время в соответствии с удаленным NTP-сервером, используя Linux. Я не хочу менять местное время в результате; Я просто хочу распечатать удаленную дату с поправкой на местный часовой пояс. Дата возвращения должна соответствовать следующим критериям:

  1. Это должно быть достаточно точно.
  2. Он должен быть скорректирован с учетом часового пояса в локальной системе, выполняющей запрос.
  3. Это должно быть отформатировано легко читаемым или интерпретируемым способом (стандартный формат даты, или секунды с начала эпохи).

Что я пробовал:

Я могу вызвать ntpdate -q my.ntp.server и получить смещение между местным временем и временем сервера, но это не возвращает дату в соответствии с NTP-сервером; он просто возвращает смещение и локальную дату.

Есть ли какой-нибудь простой способ / команда, которую я могу использовать, чтобы сказать: «Распечатать дату в соответствии с данным NTP-сервером, с учетом моего текущего часового пояса»?

1 ответ1

2

Этот 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .