3

私がこれまでに得たのは、w32tm/ntpteが1900/1/1から始まり2036/7/2で終わる2^32スライスを使用することです。私の計算によると、各期間は約1秒です。悪い点は、期間が連続して列挙されておらず、すべてが2の累乗に基づく期間に関するものであるということです。 これはNTPプロトコルを使用します(このドキュメントは読みにくいです) 。時代と現在のタイムスタンプを取得し、2 ^ 32を使用して目的の日付を計算すると思いますが、現在のタイムスタンプと使用する時代を取得する方法がわかりません。 この男はここでいくつかの悟り を持っていましたが、私は彼の例と同じ結果を得ることができません。

簡単な例もあります。

c:\> w32tm /ntpte 256
0x014F37D494604000 - 109207 18:12:16.0000000 - 1.1.1900  20:12 

これらのヘクスと2番目の数もわかりませんが、知っておくと面白いでしょう。単純なバッチでは必要なものを計算できない可能性があるので、(宇宙全体で)方法を知っている人がいる場合これがどのように実装されるかは、説明のための例/説明のためにスクリプト/プログラミング言語を使用することができます。

4

1 に答える 1

4

16進数の意味がわかりませんでしたが、2番目の数値はANSI日付、つまり1601年1月1日から経過した日数です。パラメーターは1900-01-0100:00から経過した秒数です。 :00ですが、バイト順が逆で、最初のバイトが最下位です(1900-01-01 00:00:01は0x01000000としてエンコードされます)。w32tmを2013年1月15日22:00UTCに印刷するには、次のコマンドを使用します。

w32tm /ntpte 0xe04fa0d4

また

w32tm /ntpte 3763314900

(16進数から10進数への変換は、バイト順序が正常であるかのようになります)。

編集:w32tmによって出力される16進値は、1601年1月1日以降の100ナノ秒間隔の数を表す64ビット整数のようです。この記事から、これがWindowsがFILETIMEを格納する方法であることがわかります。

EDIT2:もう少し遊んだ後、私は別の2つのことを見つけました:

  1. 渡されるパラメーターw32tm /ntpteは、実際には64ビット整数です。前に書いたように、最上位の32ビットは1900-01-01 00:00:00以降の秒数を表し、最下位の32ビットは秒の小数部を表します。64ビットの数値全体は、1900年1月1日からの1 /(2の32乗)秒間隔の数を表します。したがって0x0000008000000000、1900-01-0100:00:00以降の1/2秒に相当します。

  2. によって出力される16進値w32tm /ntpteは、パラメーターとして直接に渡すことができます。w32tm /ntte

于 2013-01-15T22:44:20.940 に答える