Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

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


Summary

Under UNIX platforms, file times are maintained in the form of a ANSI C runtime 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.

↑ Back to the top


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 <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 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);
}

↑ Back to the top


Keywords: kb, kbprogramming, kbkernbase, kbhowto, kbdsupport, kbdatetime, kbbillprodsweep

↑ Back to the top

Article Info
Article ID : 167296
Revision : 6
Created on : 8/20/2020
Published on : 8/20/2020
Exists online : False
Views : 236