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 を返します。誰かが上記のコードを修正するか、代替案を提供できますか?
EDIT:日付を文字列に変換した後、文字列を使用して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);