美好的一天。我自1970年1月1日起有一段时间,例如, 1487520625361
所以,我需要从中设置Windows时间。我找到了一个SetLocalTime(& SYSTEMTIME)函数。那么,我需要解析ms的数量,还是可以更容易地执行?
答案 0 :(得分:2)
一般情况下,您永远不想使用FILETIME
结构(已经拆分并仅用于显示),但使用FILETIME
(时间表示为自1开始以100 ns的间隔数) / 1/1601)并在计算结束时进行转换。
所以你需要:
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
。