web-dev-qa-db-ja.com

ローカルに設定せずにNTPサーバーに従って現在の日付を取得するにはどうすればよいですか?

Linuxを使用して、リモートNTPサーバーに従って、現在の日付と時刻を取得したい。結果として現地時間を変更したくない。リモートの日付を取得したいだけだ。 、現地のタイムゾーンに合わせて調整され、印刷されます。返される日付は、次の基準に準拠している必要があります。

  1. 適度に正確である必要があります。
  2. リクエストを行うローカルシステムのタイムゾーンに合わせて調整する必要があります。
  3. 読みやすく、解釈しやすい方法(標準の日付形式、またはエポックからの秒数)でフォーマットする必要があります。

私が試したこと:

ntpdate -q my.ntp.serverを呼び出して、現地時間とサーバーの時間の間のオフセットを取得できますが、NTPサーバー;オフセットを返すだけで、ローカル日付。

「指定されたNTPサーバー、現在のタイムゾーンに合わせて調整)に従って日付を印刷する」と言うために使用できる簡単な方法/コマンドはありますか?

6
Zac B

この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
2
terdon