Я пытаюсь преобразовать 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);