51 lines
1 KiB
C++
51 lines
1 KiB
C++
#include "TimeFunctions.h"
|
|
#include "stdafx.h"
|
|
#include "TimeFunctions.h"
|
|
|
|
#pragma unmanaged
|
|
|
|
TimeFunctions::TimeFunctions()
|
|
{
|
|
}
|
|
|
|
|
|
UINT32 FileTime_to_POSIX(FILETIME ft)
|
|
{
|
|
// takes the last modified date
|
|
LARGE_INTEGER date, adjust;
|
|
date.HighPart = ft.dwHighDateTime;
|
|
date.LowPart = ft.dwLowDateTime;
|
|
|
|
// 100-nanoseconds = milliseconds * 10000
|
|
adjust.QuadPart = 11644473600000 * 10000;
|
|
|
|
// removes the diff between 1970 and 1601
|
|
date.QuadPart -= adjust.QuadPart;
|
|
|
|
// converts back from 100-nanoseconds to seconds
|
|
return (UINT32)(date.QuadPart / 10000000);
|
|
}
|
|
|
|
UINT32 UnixTimeNow() {
|
|
FILETIME ft;
|
|
GetSystemTimeAsFileTime(&ft);
|
|
return FileTime_to_POSIX(ft);
|
|
}
|
|
|
|
void TimeFunctions::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;
|
|
}
|
|
|
|
void TimeFunctions::UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
|
|
{
|
|
FILETIME ft;
|
|
UnixTimeToFileTime(t, &ft);
|
|
FileTimeToSystemTime(&ft, pst);
|
|
}
|
|
|