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:
@@ -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
|
||||||
|
Reference in New Issue
Block a user