//****************************************************************************** // // 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 #include "smartptr.h" #include "WbemTime.h" #include //****************************************************************************** // // 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 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; } } XPtrSTxpTemp = 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; }