如何直接从 FILETIME 结构获取/设置和获取秒数

How do I get/set and get the number of seconds directly from/on a FILETIME structure?

本文关键字:获取 设置 取秒 FILETIME 结构 何直接      更新时间:2023-10-16

如何直接从 FILETIME 结构中设置和获取秒数?

在不使用任何 API 的情况下,我想从 FILETIME 结构获取/设置秒数。

这可能吗?

我尝试过如何做一些数学运算,但我还没有想出一个公式。

看这里:

文件时间是一个 64 位值,表示自 1601 年 1 月 1 日协调世界时 (UTC( 凌晨 12:00 以来经过的 100 纳秒间隔数。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724290.aspx

要将结构转换为 64 位值,只需将两个部分组合成一个 __int64,然后整数除以 10.000.000(1 秒有 10 亿纳秒,或 1E9;因此 100 ns 分辨率是该值的 1/100 或 1E7(。

FILETIME timeFile;
__int64 Time = (__int64) timeFile.dwHighDateTime << 32 | timeFile.dwLowDateTime;
int TimeSec = Time / 10000000;

您可以使用ULARGE_INTEGER并通过 访问它。该联合的Quadpart,但Microsoft也建议使用__int64或ULONGON。64 位数字在 中有点混乱。


如果需要秒的值作为与分钟有关的分数,请使用模 60。这同样适用于分钟和小时,但请注意,FILTETIME 是 UTC 而不是本地时间。提取日期,月份和年份变得有点棘手,听起来不像想要那样。