handle negative time spans correctly in Format()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40205 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -4234,11 +4234,14 @@ wxString wxTimeSpan::Format(const wxChar *format) const
|
||||
if ( ch == _T('%') )
|
||||
{
|
||||
// the start of the format specification of the printf() below
|
||||
wxString fmtPrefix = _T('%');
|
||||
wxString fmtPrefix(_T('%'));
|
||||
|
||||
// the number
|
||||
long n;
|
||||
|
||||
// the number of digits for the format string, 0 if unused
|
||||
unsigned digits = 0;
|
||||
|
||||
ch = *++pch; // get the format spec char
|
||||
switch ( ch )
|
||||
{
|
||||
@@ -4273,6 +4276,13 @@ wxString wxTimeSpan::Format(const wxChar *format) const
|
||||
n = GetHours();
|
||||
if ( partBiggest < Part_Hour )
|
||||
{
|
||||
if ( n < 0 )
|
||||
{
|
||||
// the sign has already been taken into account
|
||||
// when outputting the biggest part
|
||||
n = -n;
|
||||
}
|
||||
|
||||
n %= HOURS_PER_DAY;
|
||||
}
|
||||
else
|
||||
@@ -4280,25 +4290,31 @@ wxString wxTimeSpan::Format(const wxChar *format) const
|
||||
partBiggest = Part_Hour;
|
||||
}
|
||||
|
||||
fmtPrefix += _T("02");
|
||||
digits = 2;
|
||||
break;
|
||||
|
||||
case _T('l'):
|
||||
n = GetMilliseconds().ToLong();
|
||||
if ( partBiggest < Part_MSec )
|
||||
{
|
||||
if ( n < 0 )
|
||||
n = -n;
|
||||
|
||||
n %= 1000;
|
||||
}
|
||||
//else: no need to reset partBiggest to Part_MSec, it is
|
||||
// the least significant one anyhow
|
||||
|
||||
fmtPrefix += _T("03");
|
||||
digits = 3;
|
||||
break;
|
||||
|
||||
case _T('M'):
|
||||
n = GetMinutes();
|
||||
if ( partBiggest < Part_Min )
|
||||
{
|
||||
if ( n < 0 )
|
||||
n = -n;
|
||||
|
||||
n %= MIN_PER_HOUR;
|
||||
}
|
||||
else
|
||||
@@ -4306,13 +4322,16 @@ wxString wxTimeSpan::Format(const wxChar *format) const
|
||||
partBiggest = Part_Min;
|
||||
}
|
||||
|
||||
fmtPrefix += _T("02");
|
||||
digits = 2;
|
||||
break;
|
||||
|
||||
case _T('S'):
|
||||
n = GetSeconds().ToLong();
|
||||
if ( partBiggest < Part_Sec )
|
||||
{
|
||||
if ( n < 0 )
|
||||
n = -n;
|
||||
|
||||
n %= SEC_PER_MIN;
|
||||
}
|
||||
else
|
||||
@@ -4320,10 +4339,19 @@ wxString wxTimeSpan::Format(const wxChar *format) const
|
||||
partBiggest = Part_Sec;
|
||||
}
|
||||
|
||||
fmtPrefix += _T("02");
|
||||
digits = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( digits )
|
||||
{
|
||||
// negative numbers need one extra position for '-' display
|
||||
if ( n < 0 )
|
||||
digits++;
|
||||
|
||||
fmtPrefix << _T("0") << digits;
|
||||
}
|
||||
|
||||
str += wxString::Format(fmtPrefix + _T("ld"), n);
|
||||
}
|
||||
else
|
||||
|
Reference in New Issue
Block a user