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:
Vadim Zeitlin
2006-07-20 15:04:10 +00:00
parent 1226b3b335
commit e566ccf1ba
3 changed files with 36 additions and 5 deletions

View File

@@ -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