从1970年1月1日起,C 设置了MS的Windows时间
C++ set Windows time from ms since 1/1/1970
美好的一天。自1970年1月1日以来,我有时间在MS上,例如1487520625361
所以,我需要从中设置Windows时间。我找到了一个setLocalTime(& SystemTime)函数。因此,我需要解析MS的数量,或者可以更容易执行?
通常,您永远不想使用SYSTEMTIME
结构(已经对显示并仅用于显示),而是使用FILETIME
(以自1的时间表示为100 ns间隔的时间/1/1601),仅在计算结束时转换。
因此您需要:
- 自1970年1月1日以来将您的MS转换为1/1/1601以来的100NS;
- 将结果放入
FILETIME
; - 将
FILETIME
转换为SYSTEMTIME
; - 呼叫
SetLocalTime
(如果原始时间戳在当地时间)或SetSystemTime
(如果是在UTC中)。
最无聊的步骤是第一个步骤,因为您必须计算两个时期之间的差异。幸运的是,它已经在KB167296中完成,事实证明,我们之后的数字是1164444736000000000。
so:
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
只是调用FileTimetoSystemime的问题。
相关文章:
- Windows Toast 通知不适用于 MS CPP 示例代码
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- Python:在Windows上选择C++编译器 - MS Visual Studio到Mingw-w64.(PySta
- 在 Ubuntu 12.04 上运行,一个在 Windows 上的 MS Visual Studio 中用 c++11
- Windows 10 中的 MS Access 数据库 SQL 查询问题
- 从1970年1月1日起,C 设置了MS的Windows时间
- 在 Windows 7 下的 Visual Studio 2015 上缺少 Api-ms-win-core-errorh
- 在swig.i文件中,如何为基于mfc的第三方dll解析ms-windows-vc++typedef类型
- 在 Windows 中自动将 xlsx 文件转换为多个 (MS-DOS) CSV 文件(每张一张一个)
- QSerialPort::readLine 在 MS Windows 上无法按预期工作
- 是否可以使用现有API修改windows功能区控件,使其看起来更像MS Word 2010中的功能区
- MS Windows套接字示例对我不起作用
- Windows MS VC++ 2005 上的 CRT 堆调试
- 在 Windows 7 上构建 64 位 Qt?(Qt 5.0.2,MS Visual Studio 2012)
- 在MS Windows中支持QT和本机OpenGL
- MS Visual Studio Windows中的发布模式与DEbug模式
- 带有用户名和密码的C++/.net(Framework 2.0)MS SQL数据库windows身份验证
- 重新分发d3dcompiler_47.dll时丢失api-ms- windows -core-libraryloader
- 检索MS Windows平台的操作系统名称
- MS Windows和Linux之间的标注差异