Microsoft KB Archive/167296

{|
 * width="100%"|

HOWTO: Convert a UNIX time_t to a Win32 FILETIME or SYSTEMTIME

 * }

Q167296

-

The information in this article applies to:


 * Microsoft Win32 Application Programming Interface (API), used with:
 * the operating system: Microsoft Windows NT, versions 3.51, 4.0
 * Microsoft Windows 95
 * the operating system: Microsoft Windows 2000

-

SUMMARY
Under UNIX platforms, file times are maintained in the form of a ANSI C run- time arithmetic type named 'time_t', which represents seconds since midnight January 1, 1970 UTC (coordinated universal time).

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

This article shows how to convert UNIX time to other Win32 time formats.

MORE INFORMATION
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:

  #include    #include    #include 

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); } Additional query words: bse time tm filetime systemtime crt

Keywords : kbprogramming kbDateTime kbKernBase kbOSWin2000 kbDSupport kbGrpDSKernBase

Issue type : kbhowto

Technology : kbAudDeveloper kbWin32sSearch kbWin32API