我正在使用操作系统信息及其InstallDate
操作系统属性的功能。我得到了BSTR
变体类型
VARIANT var1;
hres = pclsObj->Get(L"InstallDated", 0, &var1, 0, 0);
wcout << "Event Log time generated : " << var1.bstrVal << endl;
以字符串格式提供输出.20121110080510。我想它只是日期和时间。我应该如何以日期格式解析此属性或函数?
答案 0 :(得分:0)
是的,似乎是字符串格式的日期 - YYYYMMDDHHMM。
我认为您可以使用sscanf函数从字符串中选择年,月,日等等,之后您可以将其存储在SYSTEMTIME结构中。
答案 1 :(得分:0)
C ++
从我自己的代码中摘录
此处timeGenerated是BSTR,其值为20190507140217.848430-000 而eventLogItem.TimeGenerated是std :: string
if (timeGenerated.bstrVal != NULL)
{
// convert to YYYY-MM-DD HH:MM:SS
eventLogItem.TimeGenerated = _bstr_t(timeGenerated.bstrVal);
eventLogItem.TimeGenerated = eventLogItem.TimeGenerated.substr(0, 4) + "-" +
eventLogItem.TimeGenerated.substr(4, 2) + "-" +
eventLogItem.TimeGenerated.substr(6, 2) + " " +
eventLogItem.TimeGenerated.substr(8, 2) + ":" +
eventLogItem.TimeGenerated.substr(10, 2) + ":" +
eventLogItem.TimeGenerated.substr(12, 2);
}
输出 2019-05-07 14:09:32
时区代码
// Get the current timezone information
TIME_ZONE_INFORMATION timezone;
memset(&timezone, 0, sizeof(PTIME_ZONE_INFORMATION));
GetTimeZoneInformation(&timezone);
my blog上的完整源代码
答案 2 :(得分:0)
如果使用 boost :: posix_time 表示应用程序中的日期/时间信息,则可以对事件日志日期实现以下转换:
// Helper function
std::string wstring_to_utf8(const std::wstring& str)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
return myconv.to_bytes(str);
}
VARIANT var1;
hres = pclsObj->Get(L"InstallDated", 0, &var1, 0, 0);
boost::posix_time::time_input_facet *tif = new boost::posix_time::time_input_facet;
tif->format("%Y%m%d%H%M%s-000");
std::istringstream iss(wstring_to_utf8(var1.bstrVal));
iss.imbue(std::locale(std::locale::classic(), tif));
boost::posix_time::ptime datetime;
iss >> datetime;
如果您看到 new 运算符,但是不要看到 delete ,请不要感到困惑,因为time_input_facet结构会自动删除。