Как преобразовать формат CIM_DATETIME, полученный с помощью запросов WMI, в местное время в C ++ (MFC / Win32) - PullRequest
1 голос
/ 21 июня 2020

Я создаю приложение windows на C ++, чтобы узнать время загрузки системы. Я получил это с помощью запроса wmi, но он имеет формат «20140408141835.999999 + 480». Мне нужно преобразовать его в формат% d-% m-% Y% H:% M:% S. Я знаю, что в C# у нас есть ManagementDateTimeConverter.ToDateTime (); метод. Но мне нужно решение на C ++.

1 Ответ

2 голосов
/ 21 июня 2020

Вы можете использовать объект SWbemDateTime , как описано здесь: https://devblogs.microsoft.com/oldnewthing/20121102-00/?p=6183

Вот соответствующий фрагмент кода:

BOOL FileTimeFromCIMDateTime(__in LPCWSTR psz, __out LPFILETIME pft)
{
 BOOL fSuccess = FALSE;
 ISWbemDateTime *pDateTime;
 HRESULT hr = CoCreateInstance(__uuidof(SWbemDateTime), 0,
                 CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDateTime));
 if (SUCCEEDED(hr)) {
  BSTR bstr = SysAllocString(psz);
  if (bstr) {
   hr = pDateTime->put_Value(bstr);
   if (SUCCEEDED(hr)) {
    BSTR bstrFT;
    hr = pDateTime->GetFileTime(VARIANT_FALSE, &bstrFT);
    if (SUCCEEDED(hr)) {
     __int64 i64FT = _wtoi64(bstrFT);
     pft->dwLowDateTime = LODWORD(i64FT);
     pft->dwHighDateTime = HIDWORD(i64FT);
     fSuccess = TRUE;
     SysFreeString(bstrFT);
    }
   }
   SysFreeString(bstr);
  }
  pDateTime->Release();
 }
 return fSuccess;
}

Другое решение - портировать исходный код. NET на C ++, поскольку. NET является открытым исходным кодом https://referencesource.microsoft.com/#System .Management / ManagementDatetime.cs, 45057a40319a1c83

...