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

标签 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 

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

最佳答案

我没弄清楚十六进制数字是什么意思,但第二个数字是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/

相关文章:

java - Windows cmd通信的实现方法——多条命令

cmd - 如何让Notepad++根据名称运行脚本?

bash - Bash 上的反勾号的 cmd/PowerShell 等价物是什么?

c# - 如何在第二台显示器(屏幕)上隐藏部分窗口

xml - 寻找一个通过 X-Path 读取和查询大型 XML 文件的工具

windows - 来自两者的两个 kinect 和骨架流 - 可能吗?

PHPStorm 不会读取 php 解释器的整个路径

batch-file - 将批处理脚本应用于选定的视频文件

windows - 如何使用 FFmpeg 和 GeForce 硬件将 4K MKV 电影解码和编码为 1080p

android - Cordova 运行 Android 平台时出错