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

到目前为止,我所得到的是w32tm / ntpte使用了从1900/1/1开始到2036/7/2结束的2 ^ 32片。 根据我的计算,每个周期大约为1秒。坏的一面是,这些周期并没有被列举出来,一切都是基于2次方以上的周期。 它使用NTP协议 (文档不是一个不愉快的阅读)和我想得到一个时代和当前的时间戳,并使用2 ^ 32来计算所需的date – 但我不知道如何获得当前时间戳和使用什么时代。 这个人在这里有一些启发 ,但我不能得到和他的例子一样的结果。

这也是一个简单的例子:

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

我不知道这些格子和第二个数字是什么,但是知道的很有趣。可能不可能用简单的批量来计算我需要的东西,所以如果(在整个宇宙中)有人知道如何这是如何实现的可以使用脚本/编程语言作为说明性的例子/说明。

我没有弄清楚十六进制数字是什么意思,但是第二个数字是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纳秒间隔的数量。从这篇文章我知道这是如何Windows存储FILETIME。

编辑2:经过一些更多的玩,我发现了另外两件事:

  1. 传递给w32tm /ntpte参数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