Use SYSTEMTIME instead of DOS time when converting to/from VARIANTS.

SYSTEMTIME has a much larger range than DOS time and a much better precision
(1ms instead of 2s) as well.

Closes #11177.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61843 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-09-06 14:31:10 +00:00
parent 582c3a1964
commit 69f82505ec

View File

@@ -606,11 +606,10 @@ WXDLLEXPORT bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& ole
wxDateTime date( variant.GetDateTime() ); wxDateTime date( variant.GetDateTime() );
oleVariant.vt = VT_DATE; oleVariant.vt = VT_DATE;
long dosDateTime = date.GetAsDOS(); SYSTEMTIME st;
short dosDate = short((dosDateTime & 0xFFFF0000) >> 16); date.GetAsMSWSysTime(&st);
short dosTime = short(dosDateTime & 0xFFFF);
DosDateTimeToVariantTime(dosDate, dosTime, & oleVariant.date); SystemTimeToVariantTime(&st, &oleVariant.date);
} }
#endif #endif
else if (type == wxT("void*")) else if (type == wxT("void*"))
@@ -772,13 +771,11 @@ wxConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant& variant)
case VT_DATE: case VT_DATE:
#if wxUSE_DATETIME #if wxUSE_DATETIME
{ {
unsigned short dosDate = 0; SYSTEMTIME st;
unsigned short dosTime = 0; VariantTimeToSystemTime(oleVariant.date, &st);
VariantTimeToDosDateTime(oleVariant.date, & dosDate, & dosTime);
long dosDateTime = (dosDate << 16) | dosTime;
wxDateTime date; wxDateTime date;
date.SetFromDOS(dosDateTime); date.SetFromMSWSysTime(st);
variant = date; variant = date;
} }
#endif // wxUSE_DATETIME #endif // wxUSE_DATETIME