首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确地将Unix时间转换为Win 32使用的FILETIME?

如何正确地将Unix时间转换为Win 32使用的FILETIME?
EN

Stack Overflow用户
提问于 2018-08-15 05:46:32
回答 1查看 0关注 0票数 0

Microsoft在其支持文章(https://support.microsoft.com/en-us/help/167296/how-to-convert-a-unix-time-t-to-a-win32-filetime-or-systemtime)中提供以下函数:

代码语言:txt
复制
   // NOTE: this function is INCORRECT!
   void UnixTimeToFileTime(time_t t, LPFILETIME pft)
   {
     // Note that LONGLONG is a 64-bit value
     LONGLONG ll;
     ll = Int32x32To64(t, 10000000) + 116444736000000000;
     pft->dwLowDateTime = (DWORD)ll;
     pft->dwHighDateTime = ll >> 32;
   }

但是,如果Unix时间“t”指的是2038年之后的日期,则此函数会产生不正确的结果。如何让它在2038年之后正常运作?

EN

回答 1

Stack Overflow用户

发布于 2018-08-15 15:23:07

问题是Int32x32To64函数的使用,因为它将其参数截断为每个32位。如果Unix时间超过32位(就像2038年之后的日期一样),它会产生一个不正确的结果。要纠正这个问题,使用64位乘法代替Int32x32To64函数:

代码语言:txt
复制
   void UnixTimeToFileTime(time_t t, LPFILETIME pft)
   {
     // Note that LONGLONG is a 64-bit value
     LONGLONG ll;
     ll = t * 10000000I64 + 116444736000000000I64;
     pft->dwLowDateTime = (DWORD)ll;
     pft->dwHighDateTime = ll >> 32;
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档