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

This article was previously published under Q167296
Under UNIX platforms, file times are maintained in the form of a ANSI C runtime arithmetic type named 'time_t', which represents seconds sincemidnight January 1, 1970 UTC (coordinated universal time).

Under Win32 platforms, file times are maintained primarily in the form of a64-bit FILETIME structure, which represents the number of 100-nanosecondintervals since January 1, 1601 UTC (coordinate universal time).

This article shows how to convert UNIX time to other Win32 time formats.
The following function converts a filetime in the UNIX time_t format to aWin32 FILETIME format. Note that time_t is a 32-bit value and FILETIME is a64-bit structure, so the Win32 function, Int32x32To64() is used in thefollowing function:
   #include <winbase.h>   #include <winnt.h>   #include <time.h>   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 timeformats can be easily obtained by using Win32 functions such asFileTimeToSystemTime() and FileTimeToDosDateTime().
   void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)   {     FILETIME ft;     UnixTimeToFileTime(t, &ft);     FileTimeToSystemTime(&ft, pst);   }				
bse time tm filetime systemtime crt

Αναγνωριστικό άρθρου: 167296 - Τελευταία αναθεώρηση: 11/21/2006 15:45:00 - Αναθεώρηση: 3.3

Microsoft Win32 Application Programming Interface

  • kbhowto kbdatetime kbprogramming kbkernbase KB167296