W32TM / NTPTE命令如何工作?如何显示当前时间?

时间:2013-01-14 20:35:43

标签: windows batch-file cmd command-prompt ntp

到目前为止我得到的是 w32tm / ntpte 使用从1900/1/1开始到2036/7/2结束的2 ^ 32个切片。根据我的计算,每个时期约为1秒。不好的是,这些时期并非完全列举,而且一切都是基于权力超过2的时期。 It uses NTP protocol(哪个文档不是一个不愉快的阅读),我想要得到一个时代和当前的时间戳,并使用2 ^ 32来计算所需的日期 - 但我不知道如何获得当前的时间戳和什么时代使用。 This guy here had some enlightenment,但我无法得到与他的例子相同的结果。

这也是一个简单的例子:

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

我不知道这些六角形和第二个数字是什么,但知道很有意思。可能用简单的批量计算我需要的东西是不可能的,所以如果那里(在整个宇宙中)是某人谁知道如何实现它可以使用脚本/编程语言作为说明性示例/解释。

1 个答案:

答案 0 :(得分:3)

我无法确定十六进制数的含义,但第二个数字是ANSI日期,即自1601年1月1日以来经过的天数。该参数是自1900-01-01以来经过的秒数00:00:00,但它具有反向字节顺序,第一个字节是最不重要的(1900-01-01 00:00:01编码为0x01000000)。要让w32tm打印出2013年1月15日22:00 UTC,请使用以下命令:

w32tm /ntpte 0xe04fa0d4

w32tm /ntpte 3763314900

(从十六进制转换为十进制就像字节顺序正常一样)。

编辑:w32tm打印的十六进制值似乎是一个64位整数,表示自1601年1月1日以来100纳秒间隔的数量。从article我知道这就是Windows存储FILETIME的方式。 / p>

EDIT2:经过更多的游戏,我发现了另外两件事:

  1. 传递给w32tm /ntpte的参数实际上是64位整数。正如我之前所写,最重要的32位代表自1900-01-01 00:00:00以来的秒数,而最低有效32位代表秒的分数。整个64位数表示自1900年1月1日以来第二个时间间隔的1 /(2到32次幂)的数量。因此0x0000008000000000等于1900-01-01 00:00:00之后的1/2秒

  2. w32tm /ntpte打印的十六进制值可以直接作为参数传递给w32tm /ntte