WindowsXP-SP1/ds/adsi/utils/date.cxx

247 lines
4.9 KiB
C++

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