How To Convert a UNIX time_t to a Win32 FILETIME or SYSTEMTIME


How to convert a Unix timestamp to a Win32 FILETIME or SYSTEMTIME?

✍: FYIcenter


The following function converts a filetime in the UNIX time_t format to a Win32 FILETIME format. Note that time_t is a 32-bit value and FILETIME is a 64-bit structure, so the Win32 function, Int32x32To64() is used in the following function:


   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;

Once the UNIX time is converted to a FILETIME structure, other Win32 time formats can be easily obtained by using Win32 functions such as FileTimeToSystemTime() and FileTimeToDosDateTime().

   void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
     FILETIME ft;

     UnixTimeToFileTime(t, &ft);
     FileTimeToSystemTime(&ft, pst);

2012-01-02, 6385👍, 0💬