Use VariantTimeToSystemTime() in wxConvertOleToVariant().

Fix the problem with variants containing only time (but not date) information.

Also check in the symmetric changes to wxConvertVariantToOle() but disable
them for now as they were not tested.

Closes #11177.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@61846 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-09-06 15:59:49 +00:00
parent 01943fa2ea
commit 080a52bc8e

View File

@@ -606,11 +606,31 @@ WXDLLEXPORT bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& ole
wxDateTime date( variant.GetDateTime() );
oleVariant.vt = VT_DATE;
// we ought to use SystemTimeToVariantTime() here but this code is
// untested and hence currently disabled, please let us know if it
// works for you and we'll enable it
#if 0
const wxDateTime::Tm tm(date.GetTm());
SYSTEMTIME st;
st.wYear = (WXWORD)tm.year;
st.wMonth = (WXWORD)(tm.mon - wxDateTime::Jan + 1);
st.wDay = tm.mday;
st.wDayOfWeek = 0;
st.wHour = tm.hour;
st.wMinute = tm.min;
st.wSecond = tm.sec;
st.wMilliseconds = tm.msec;
SystemTimeToVariantTime(&st, &oleVariant.date);
#else
long dosDateTime = date.GetAsDOS();
short dosDate = short((dosDateTime & 0xFFFF0000) >> 16);
short dosTime = short(dosDateTime & 0xFFFF);
DosDateTimeToVariantTime(dosDate, dosTime, & oleVariant.date);
#endif
}
#endif
else if (type == wxT("void*"))
@@ -689,14 +709,17 @@ WXDLLEXPORT bool wxConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant&
case VT_DATE:
{
#if wxUSE_DATETIME
unsigned short dosDate = 0;
unsigned short dosTime = 0;
VariantTimeToDosDateTime(oleVariant.date, & dosDate, & dosTime);
SYSTEMTIME st;
VariantTimeToSystemTime(oleVariant.date, &st);
long dosDateTime = (dosDate << 16) | dosTime;
wxDateTime date;
date.SetFromDOS(dosDateTime);
variant = date;
date.Set(st.wDay,
(wxDateTime::Month)(wxDateTime::Jan + st.wMonth - 1),
st.wYear,
st.wHour,
st.wMinute,
st.wSecond);
#endif
break;
}