eDosStation/MK3/TimeFunctions.cpp

56 lines
1.5 KiB
C++
Raw Normal View History

2021-05-11 16:46:20 +02:00
#include "pch.h"
2021-04-30 17:21:31 +02:00
#include "TimeFunctions.h"
#pragma unmanaged
TimeFunctions::TimeFunctions()
{
2021-05-31 15:20:16 +02:00
2021-04-30 17:21:31 +02:00
}
2021-05-20 16:13:23 +02:00
void TimeFunctions::EpdTimeToFileTime( INT32 t, LPFILETIME pft, bool isMK2) //MK3
2021-05-11 16:46:20 +02:00
{
2021-05-20 16:13:23 +02:00
LONGLONG offset ;
if (isMK2) offset = 116444736000000000; else offset = 125911584000000000;;
2021-05-11 16:46:20 +02:00
LONGLONG ll;
2021-05-20 16:13:23 +02:00
ll = Int32x32To64(t, 10000000) + offset; //1601-1-1 -> 2000
2021-05-11 16:46:20 +02:00
pft->dwLowDateTime = (DWORD)ll;
pft->dwHighDateTime = ll >> 32;
}
2021-04-30 17:21:31 +02:00
2021-05-20 16:13:23 +02:00
void TimeFunctions::FileTimeToEpdTime( FILETIME pft, INT32* t, bool isMK2)
2021-05-19 16:38:54 +02:00
{
2021-05-20 16:13:23 +02:00
LONGLONG offset;
if (isMK2) offset = 116444736000000000; else offset = 125911584000000000;
LONGLONG ll = ((((LONGLONG)pft.dwHighDateTime << 32) + pft.dwLowDateTime) - offset) / 10000000;
2021-05-19 16:38:54 +02:00
*t = (DWORD)ll;
}
2021-05-20 16:13:23 +02:00
INT32 TimeFunctions::NowToEpdTime(bool isMK2)
2021-05-19 16:38:54 +02:00
{
2021-05-20 16:13:23 +02:00
LONGLONG offset;
if (isMK2) offset = 116444736000000000; else offset = 125911584000000000;
2021-05-19 16:38:54 +02:00
SYSTEMTIME t;
GetSystemTime(&t);
FILETIME ft;
SystemTimeToFileTime((const SYSTEMTIME *)&t, &ft);
2021-05-20 16:13:23 +02:00
LONGLONG ll = ((((LONGLONG)ft.dwHighDateTime << 32U) + ft.dwLowDateTime) - offset) / 10000000;
2021-05-19 16:38:54 +02:00
return (DWORD)ll;
}
2021-04-30 17:21:31 +02:00
void TimeFunctions::UnixTimeToFileTime(time_t t, LPFILETIME pft)
{
// Note that LONGLONG is a 64-bit value
LONGLONG ll;
2021-05-11 16:46:20 +02:00
ll = Int32x32To64(t, 10000000) + 116444736000000000; //1601-1-1 1970-1-1
2021-04-30 17:21:31 +02:00
pft->dwLowDateTime = (DWORD)ll;
pft->dwHighDateTime = ll >> 32;
}
void TimeFunctions::UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
{
FILETIME ft;
UnixTimeToFileTime(t, &ft);
FileTimeToSystemTime(&ft, pst);
}