自1970年1月1日起,C ++设置Windows时间

时间:2017-02-19 14:39:28

标签: c++ time

美好的一天。我自1970年1月1日起有一段时间,例如, 1487520625361

所以,我需要从中设置Windows时间。我找到了一个SetLocalTime(& SYSTEMTIME)函数。那么,我需要解析ms的数量,还是可以更容易地执行?

1 个答案:

答案 0 :(得分:2)

一般情况下,您永远不想使用FILETIME结构(已经拆分并仅用于显示),但使用FILETIME(时间表示为自1开始以100 ns的间隔数) / 1/1601)并在计算结束时进行转换。

所以你需要:

  • 自1970年1月1日起将您的ms转换为自1/1/1601以来的100ns;
  • 将结果放入FILETIME;
  • SYSTEMTIME转换为SetLocalTime;
  • 调用SetSystemTime(如果原始时间戳是本地时间)或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; } (如果是UTC格式)。

最无聊的一步是第一步,因为你必须计算两个时代之间的差异;幸运的是,它已经在https://www.postgresql.org/docs/9.3/static/ddl-default.html完成了,事实证明我们所追求的数字是116444736000000000。

所以:

FILETIME

然后将SYSTEMTIME转换为Settings()只需要调用execute/1