我正在尝试将 VARIANT 从 VT_DATE 转换为不变的VT_BSTR。以下代码适用于 Windows XP:
VARIANT va;
::VariantInit(&va);
// set the variant to VT_DATE
SYSTEMTIME st;
memset(&st, 0, sizeof(SYSTEMTIME));
st.wYear = 2008;
st.wMonth = 9;
st.wDay = 22;
st.wHour = 12;
st.wMinute = 30;
DATE date;
SystemTimeToVariantTime(&st, &date);
va.vt = VT_DATE;
va.date = date;
// change to a string
err = ::VariantChangeTypeEx(&va,
&va,
LOCALE_INVARIANT,
0,
VT_BSTR);
但在 PPC 2003 和 Windows Mobile 5 上,上述代码返回 E_FAIL。有人可以更正上述代码或提供替代方法吗?
编辑:将日期转换为字符串后,我使用字符串进行 SQL 更新。无论设备的区域设置如何,我都希望更新能够正常工作,这就是我尝试将其转换为“不变”格式的原因。
我现在使用以下方法将日期转换为似乎可以使用的格式:
err = ::VariantTimeToSystemTime(va.date, &time);
if (FAILED(err))
goto cleanup;
err = strDate.PrintF(_T("%04d-%02d-%02d %02d:%02d:%02d.%03d"),
time.wYear,
time.wMonth,
time.wDay,
time.wHour,
time.wMinute,
time.wSecond,
time.wMilliseconds);