【问题标题】:How W32TM /NTPTE command works?How to display the current time with this?W32TM /NTPTE 命令如何工作?如何显示当前时间?
【发布时间】:2013-01-14 20:35:42
【问题描述】:

到目前为止,我得到的是 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 

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

【问题讨论】:

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


    【解决方案1】:

    我没弄清楚十六进制数字的含义,但第二个数字是 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 的方式。

    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

    【讨论】:

    • 嘿。非常感谢。我会在将其标记为答案之前先检查一下,但看起来它有效:-)
    • 这使得 w32tm /ntte 和 w32tm /ntpte 之间的联系更加清晰 - 再次感谢。
    • 您的上一次编辑提供了更多需要考虑的事情 :-)。此命令:w32tm /stripchart /computer:localhost /period:1 /samples:1 /packetinfo 还提供 4 个 64 位十六进制数字的时间戳(根据它们的名称和 NTP 文档),但首先视线与w32tm /ntpte 的格式不同。现在我想看看它们是如何连接的。
    • 您可以在颠倒它们的字节顺序后将这些时间戳传递给w32tm /ntpte。例如我得到时间戳0xD4A22E24AD31C8CF。要让 w32tm /ntpte 正确显示日期,我必须通过 0xcfc831ad242ea2d4
    • 不,我不是 :-) 我只是注意到时间戳以 D4 开头,而我的答案中的值以 D4 结尾。接下来的 6 位也是相同的(比较 A0A2)。而且我们已经发现w32tm /ntpte参数的字节顺序是相反的。所有这些都给了我一个尝试反转时间戳的线索。还有宾果游戏!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2021-01-31
    • 2011-07-03
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多