再会。自1970年1月1日以来,我的时间以毫秒为单位,例如1487520625361
因此,我需要从中设置Windows时间。我发现了一个SetLocalTime(&SYSTEMTIME)函数。因此,我需要解析ms数,或者可以更轻松地执行它?
通常,您永远都不想使用该SYSTEMTIME
结构(该结构已经分解并且仅用于显示),而是使用FILETIME
(从1/1/1601开始以100 ns间隔表示的时间表示)并只在结束时进行转换计算。
因此,您需要:
FILETIME
;FILETIME
为SYSTEMTIME
;SetLocalTime
(如果原始时间戳是本地时间)或SetSystemTime
(如果是UTC)。最无聊的步骤是第一个步骤,因为您必须计算两个纪元之间的差。幸运的是,它已经在KB167296中完成,事实证明我们所追求的数字是116444736000000000。
所以:
void msecSinceEpochToFileTime(uint64_t msecSinceEpoch, FILETIME *ft) {
uint64_t result = msecSinceEpoch * 10000; // ms => 100ns
result += 116444736000000000ULL; // Unix epoch in FILETIME
ft->dwLowDateTime = (DWORD) result;
ft->dwHighDateTime = result >> 32;
}
然后转换FILETIME
到SYSTEMTIME
仅仅是调用的问题FileTimeToSystemTime。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句