gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:07:20 26 4
gpt4 key购买 nike

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

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

最佳答案

我没弄清楚十六进制数字是什么意思,但第二个数字是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 之后的 1/2 秒: 00:00。

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

关于windows - W32TM/NTPTE命令如何工作?如何用这个显示当前时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14326210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com