X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5c33522fca7cddc441a316f5b9fb50d7685435ba..4e916e61ea24c165fb55e78172f1093bf7481b48:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index 8346806913..1547b4a14e 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -381,7 +381,8 @@ extern const char *wxDumpDate(const wxDateTime* dt) static char buf[128]; wxString fmt(dt->Format("%Y-%m-%d (%a) %H:%M:%S")); - wxStrncpy(buf, fmt + " (" + dt->GetValue().ToString() + " ticks)", + wxStrlcpy(buf, + (fmt + " (" + dt->GetValue().ToString() + " ticks)").ToAscii(), WXSIZEOF(buf)); return buf; @@ -1272,6 +1273,17 @@ wxDateTime wxDateTime::GetBeginDST(int year, Country country) wxFAIL_MSG( _T("no first Sunday in April?") ); } } + else if ( year > 2006 ) + // Energy Policy Act of 2005, Pub. L. no. 109-58, 119 Stat 594 (2005). + // Starting in 2007, daylight time begins in the United States on the + // second Sunday in March and ends on the first Sunday in November + { + if ( !dt.SetToWeekDay(Sun, 2, Mar, year) ) + { + // weird... + wxFAIL_MSG( _T("no second Sunday in March?") ); + } + } else { if ( !dt.SetToWeekDay(Sun, 1, Apr, year) ) @@ -1348,21 +1360,36 @@ wxDateTime wxDateTime::GetEndDST(int year, Country country) dt.Set(30, Sep, year); break; - default: - // DST ends at 2 a.m. on the last Sunday of October - if ( !dt.SetToLastWeekDay(Sun, Oct, year) ) + default: // default for switch (year) + if ( year > 2006 ) + // Energy Policy Act of 2005, Pub. L. no. 109-58, 119 Stat 594 (2005). + // Starting in 2007, daylight time begins in the United States on the + // second Sunday in March and ends on the first Sunday in November { - // weirder and weirder... - wxFAIL_MSG( _T("no last Sunday in October?") ); + if ( !dt.SetToWeekDay(Sun, 1, Nov, year) ) + { + // weird... + wxFAIL_MSG( _T("no first Sunday in November?") ); + } + } + else + // pre-2007 + // DST ends at 2 a.m. on the last Sunday of October + { + if ( !dt.SetToLastWeekDay(Sun, Oct, year) ) + { + // weirder and weirder... + wxFAIL_MSG( _T("no last Sunday in October?") ); + } } dt += wxTimeSpan::Hours(2); - // TODO what about timezone?? + // TODO: what about timezone?? } break; - default: + default: // default for switch (country) // assume October 26th as the end of the DST - totally bogus too dt.Set(26, Oct, year); } @@ -4273,6 +4300,14 @@ enum TimeSpanPart // %l milliseconds (000 - 999) wxString wxTimeSpan::Format(const wxString& format) const { + // we deal with only positive time spans here and just add the sign in + // front for the negative ones + if ( IsNegative() ) + { + wxString str(Negate().Format(format)); + return "-" + str; + } + wxCHECK_MSG( !format.empty(), wxEmptyString, _T("NULL format in wxTimeSpan::Format") ); @@ -4344,13 +4379,6 @@ wxString wxTimeSpan::Format(const wxString& 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 @@ -4365,9 +4393,6 @@ wxString wxTimeSpan::Format(const wxString& format) const 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 @@ -4380,9 +4405,6 @@ wxString wxTimeSpan::Format(const wxString& format) const n = GetMinutes(); if ( partBiggest < Part_Min ) { - if ( n < 0 ) - n = -n; - n %= MIN_PER_HOUR; } else @@ -4397,9 +4419,6 @@ wxString wxTimeSpan::Format(const wxString& format) const n = GetSeconds().ToLong(); if ( partBiggest < Part_Sec ) { - if ( n < 0 ) - n = -n; - n %= SEC_PER_MIN; } else @@ -4413,10 +4432,6 @@ wxString wxTimeSpan::Format(const wxString& format) const if ( digits ) { - // negative numbers need one extra position for '-' display - if ( n < 0 ) - digits++; - fmtPrefix << _T("0") << digits; }