|
|
#include "Procs.hxx"
#define BAIL_ON_FAILURE(hr) \
if (FAILED(hr)) { \ goto error; \ }\
#define BAIL_ON_SUCCESS(hr) \
if (SUCCEEDED(hr)) { \ goto error; \ }\
HRESULT NTTimeFormattoDateFormat( LARGE_INTEGER *NTTimeFormat, DATE *DateFormat ) { *DateFormat = (DATE)0; RRETURN(S_OK); }
HRESULT ConvertDWORDtoDATE( DWORD dwDate, DATE * pdaDate, BOOL fIsGMT ) {
FILETIME fileTime; SYSTEMTIME SystemTime, LocalTime; LARGE_INTEGER tmpTime; HRESULT hr = S_OK;
if (pdaDate) { memset(pdaDate, 0, sizeof(DATE)); }
memset(&fileTime, 0, sizeof(FILETIME));
::RtlSecondsSince1970ToTime(dwDate, &tmpTime );
fileTime.dwLowDateTime = tmpTime.LowPart; fileTime.dwHighDateTime = tmpTime.HighPart;
if(!fIsGMT) // OLE DB on NDS does not convert to local file time. We don't
// convert here to be consistent.
FileTimeToLocalFileTime(&fileTime, &fileTime);
if (!FileTimeToSystemTime(&fileTime, &SystemTime)) { hr = HRESULT_FROM_WIN32(GetLastError()); BAIL_ON_FAILURE(hr); }
if (!SystemTimeToVariantTime(&SystemTime, pdaDate)) { hr = HRESULT_FROM_WIN32(GetLastError()); BAIL_ON_FAILURE(hr); }
error:
RRETURN(hr); }
HRESULT ConvertDATEtoDWORD( DATE daDate, DWORD *pdwDate, BOOL fIsGMT ) {
FILETIME fileTime; LARGE_INTEGER tmpTime; HRESULT hr = S_OK; SYSTEMTIME systemTime;
if (!VariantTimeToSystemTime(daDate, &systemTime)) { hr = HRESULT_FROM_WIN32(GetLastError()); BAIL_ON_FAILURE(hr); }
if (!SystemTimeToFileTime(&systemTime, &fileTime)) { hr = HRESULT_FROM_WIN32(GetLastError()); BAIL_ON_FAILURE(hr); }
if(!fIsGMT) // OLE DB on NDS does not convert to local file time. We don't
// convert here to be consistent.
LocalFileTimeToFileTime(&fileTime, &fileTime);
tmpTime.LowPart = fileTime.dwLowDateTime; tmpTime.HighPart = fileTime.dwHighDateTime;
::RtlTimeToSecondsSince1970(&tmpTime, (ULONG *)pdwDate);
error: RRETURN(hr);
}
HRESULT ConvertDATEToDWORD( DATE daDate, DWORD *pdwDate ) { RRETURN(S_OK); }
HRESULT ConvertSystemTimeToDATE( SYSTEMTIME Time, DATE * pdaTime ) { FILETIME ft; BOOL fRetval = FALSE; USHORT wDosDate; USHORT wDosTime; SYSTEMTIME LocalTime;
//
// Get Time-zone specific local time.
//
fRetval = SystemTimeToTzSpecificLocalTime( NULL, &Time, &LocalTime ); if(!fRetval){ RRETURN(HRESULT_FROM_WIN32(GetLastError())); }
//
// System Time To File Time.
//
fRetval = SystemTimeToFileTime(&LocalTime, &ft); if(!fRetval){ RRETURN(HRESULT_FROM_WIN32(GetLastError())); }
//
// File Time to DosDateTime.
//
fRetval = FileTimeToDosDateTime(&ft, &wDosDate, &wDosTime); if(!fRetval){ RRETURN(HRESULT_FROM_WIN32(GetLastError())); }
//
// DosDateTime to VariantTime.
//
fRetval = DosDateTimeToVariantTime(wDosDate, wDosTime, pdaTime ); if(!fRetval){ RRETURN(HRESULT_FROM_WIN32(GetLastError())); }
RRETURN(S_OK); }
HRESULT ConvertDWORDToDATE( DWORD dwTime, DATE * pdaTime )
{ RRETURN(S_OK); }
HRESULT ConvertDATEToSYSTEMTIME( DATE daDate, SYSTEMTIME *pSysTime ) { HRESULT hr; FILETIME ft; FILETIME lft; //local file time
BOOL fRetval = FALSE; SYSTEMTIME LocalTime; USHORT wDosDate; USHORT wDosTime;
fRetval = VariantTimeToDosDateTime(daDate, &wDosDate, &wDosTime );
if(!fRetval){ hr = HRESULT_FROM_WIN32(GetLastError()); RRETURN(hr); }
fRetval = DosDateTimeToFileTime(wDosDate, wDosTime, &lft);
if(!fRetval){ hr = HRESULT_FROM_WIN32(GetLastError()); RRETURN(hr); }
//
// convert local file time to filetime
//
fRetval = LocalFileTimeToFileTime(&lft, &ft );
if(!fRetval){ hr = HRESULT_FROM_WIN32(GetLastError()); RRETURN(hr); }
fRetval = FileTimeToSystemTime(&ft, pSysTime );
if(!fRetval){ hr = HRESULT_FROM_WIN32(GetLastError()); RRETURN(hr); }
RRETURN(S_OK); }
|