Windows Hotfixes 的时间戳 ( InstalledOn
) 格式并不规律,它显示各种类型,如MM-DD-YYYY
、、和。YYYY/MM/DD
YYYYMMDD
01d15614cbaee92c
Win32_QuickFixEngineering
这些值可以从中获得WMIC
。
我想知道时间戳是什么样的01d15614cbaee92c
以及如何解析它。
示例数据:
Update KB955484 10cd4bf3009a2541
Update KB971512 01cd35e8c07bdeb1
Security Update KB2079403 01cd04587fa78c94
Security Update KB3109094 01d15614cbaee92c
谢谢。
答案1
我会尝试一下。
我认为十六进制值是文件时间s,以 64 位十六进制表示。
文件时间是
一个 64 位值,表示自 1601 年 1 月 1 日 (UTC) 以来 100 纳秒间隔的数量
微软将这些 100 纳秒单位称为蜱虫。
下面是一个 JavaScript 函数,它将其中一个字符串转换为 JavaScript 日期,然后你可以格式以任何你想要的方式。在示例中,控制台日志将显示日期ISO 8601 格式。
const getDateFromHexTicks = hex => {
const ticks = BigInt(`0x${hex}`);
const ticksPerMs = BigInt(1e4);
const ms = ticks / ticksPerMs;
const fileTimeEpochOffset = BigInt(new Date('1601-01-01T00:00:00.000Z').getTime());
const unixTime = Number(ms + fileTimeEpochOffset);
const date = new Date(unixTime);
return date;
};
const date = getDateFromHexTicks('01d15614cbaee92c');
console.log(date.toISOString()); // 2016-01-23T19:32:28.702Z
参考示例数据中的最后一行:
Security Update KB3109094 01d15614cbaee92c
表示此更新已安装在2016-01-23T19:32:28.702Z
答案2
哎呀。这不是解决方案。抱歉我的错误。
- 转换
01d15614cbaee92c
为十进制:130980511487027500
- 删除最后 5 位数字:(
1309805114870
另请参阅:https://stackoverflow.com/questions/35765637/convert-hexadecimal-value-to-timestamp-date-and-time) - 除以 1,000 并向上舍入:
1309805115
- 转换为 unix(epoch) 时间:
1309805115
相当于07/04/2011 @ 6:45pm
(UTC)、2011-07-04T18:45:15+00:00
(ISO 8601)
但是,KB3109094
它是在 2015 年 12 月 5 日发布的,不可能有 2011 年 7 月 4 日的时间戳。(感谢@Ramhound)