Microsoft在其support article中提供以下功能:
// 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年后如何使其正常工作?
答案 0 :(得分:0)
问题在于Int32x32To64函数的使用,因为它会将其参数分别截断为32位。如果Unix时间超过32位(发生在2038年之后的日期),则会产生错误的结果。要解决此问题,请使用64位乘法而不是Int32x32To64函数:
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; }
希望这可以节省时间。