|
|
//******************************************************************************
//
// Microsoft Confidential. Copyright (c) Microsoft Corporation 1999. All rights reserved
//
// File: WbemTime.cpp
//
// Description: Utility functions to convert between SYSTEMTIME and strings in
// WBEM datetime format.
//
// History: 12-08-99 leonardm Created
//
//******************************************************************************
#include <wchar.h>
#include "smartptr.h"
#include "WbemTime.h"
#include <strsafe.h>
//******************************************************************************
//
// Function: SystemTimeToWbemTime
//
// Description:
//
// Parameters:
//
// Return:
//
// History: 12/08/99 leonardm Created.
//
//******************************************************************************
HRESULT SystemTimeToWbemTime(SYSTEMTIME& sysTime, XBStr& xbstrWbemTime) {
DWORD dwTempLength = WBEM_TIME_STRING_LENGTH + 1; XPtrST<WCHAR> xTemp = new WCHAR[dwTempLength];
if(!xTemp) { return E_OUTOFMEMORY; }
HRESULT hr = StringCchPrintf(xTemp, dwTempLength, L"%04d%02d%02d%02d%02d%02d.000000+000", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
if(FAILED(hr)) { return E_FAIL; }
xbstrWbemTime = xTemp;
if(!xbstrWbemTime) { return E_OUTOFMEMORY; }
return S_OK; }
//******************************************************************************
//
// Function: WbemTimeToSystemTime
//
// Description:
//
// Parameters:
//
// Return:
//
// History: 12/08/99 leonardm Created.
//
//******************************************************************************
HRESULT WbemTimeToSystemTime(XBStr& xbstrWbemTime, SYSTEMTIME& sysTime) { if(!xbstrWbemTime || wcslen(xbstrWbemTime) != WBEM_TIME_STRING_LENGTH) { return ERROR_INVALID_PARAMETER; }
for(int i = 0; i < 14; i++) { if(!iswdigit(xbstrWbemTime[i])) { return ERROR_INVALID_PARAMETER; } }
XPtrST<WCHAR>xpTemp = new WCHAR[5]; if(!xpTemp) { return E_OUTOFMEMORY; }
wcsncpy(xpTemp, xbstrWbemTime, 4); xpTemp[4] = L'\0'; sysTime.wYear = (WORD)_wtol(xpTemp);
wcsncpy(xpTemp, xbstrWbemTime + 4, 2); xpTemp[2] = L'\0'; sysTime.wMonth = (WORD)_wtol(xpTemp);
wcsncpy(xpTemp, xbstrWbemTime + 6, 2); xpTemp[2] = L'\0'; sysTime.wDay = (WORD)_wtol(xpTemp);
wcsncpy(xpTemp, xbstrWbemTime + 8, 2); xpTemp[2] = L'\0'; sysTime.wHour = (WORD)_wtol(xpTemp);
wcsncpy(xpTemp, xbstrWbemTime + 10, 2); xpTemp[2] = L'\0'; sysTime.wMinute = (WORD)_wtol(xpTemp);
wcsncpy(xpTemp, xbstrWbemTime + 12, 2); xpTemp[2] = L'\0'; sysTime.wSecond = (WORD)_wtol(xpTemp);
sysTime.wMilliseconds = 0; sysTime.wDayOfWeek = 0;
return S_OK; }
//*************************************************************
//
// Function: GetCurrentWbemTime
//
// Purpose: Gets the current date and time in WBEM format.
//
// Parameters: xbstrCurrentTime - Reference to XBStr which, on
// success, receives the formated
// string containing the current
// date and time.
//
// Returns: On success it returns S_OK.
// On failure, it returns E_OUTOFMEMORY.
//
// History: 12/07/99 - LeonardM - Created.
//
//*************************************************************
HRESULT GetCurrentWbemTime(XBStr& xbstrCurrentTime) { SYSTEMTIME sytemTime; GetSystemTime(&sytemTime);
HRESULT hr = SystemTimeToWbemTime(sytemTime, xbstrCurrentTime);
return hr; }
|