static HRESULT FileTimeToVariantTime(const FILETIME& fileTime, DATE* pDate)
{
if (pDate == NULL)
{
return E_POINTER;
}
SYSTEMTIME systemTime;
BOOL br = ::FileTimeToSystemTime(&fileTime, &systemTime);
if (br == 0)
{
DWORD dwError = ::GetLastError();
return HRESULT_FROM_WIN32(dwError);
}
int nr = ::SystemTimeToVariantTime(&systemTime, pDate);
if (nr == 0)
{
DWORD dwError = ::GetLastError();
return HRESULT_FROM_WIN32(dwError);
}
return S_OK;
}
static HRESULT VariantTimeToFileTime(const DATE& date, FILETIME* pFileTime)
{
if (pFileTime == NULL)
{
return E_POINTER;
}
SYSTEMTIME systemTime;
int nr = ::VariantTimeToSystemTime(date, &systemTime);
if (nr == 0)
{
DWORD dwError = ::GetLastError();
return HRESULT_FROM_WIN32(dwError);
}
FILETIME ft;
BOOL br = ::SystemTimeToFileTime(&systemTime, &ft);
if (br)
br = ::LocalFileTimeToFileTime(&ft, pFileTime);
if (br == 0)
{
DWORD dwError = ::GetLastError();
return HRESULT_FROM_WIN32(dwError);
}
return S_OK;
}