X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..08670ea85abf4b4946a9ce64971b591d7b1ee30b:/src/common/datetimefmt.cpp?ds=sidebyside diff --git a/src/common/datetimefmt.cpp b/src/common/datetimefmt.cpp index 516d9a3347..77194b0a20 100644 --- a/src/common/datetimefmt.cpp +++ b/src/common/datetimefmt.cpp @@ -57,6 +57,7 @@ #endif #include "wx/datetime.h" +#include "wx/time.h" // ============================================================================ // implementation of wxDateTime @@ -68,8 +69,6 @@ extern void InitTm(struct tm& tm); -extern int GetTimeZone(); - extern wxString CallStrftime(const wxString& format, const tm* tm); // ---------------------------------------------------------------------------- @@ -320,7 +319,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const format.Replace("%X",wxLocale::GetInfo(wxLOCALE_TIME_FMT)); #endif // we have to use our own implementation if the date is out of range of - // strftime() or if we use non standard specificators + // strftime() or if we use non standard specifiers #ifdef wxHAS_STRFTIME time_t time = GetTicks(); @@ -329,7 +328,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const // use strftime() struct tm tmstruct; struct tm *tm; - if ( tz.GetOffset() == -GetTimeZone() ) + if ( tz.GetOffset() == -wxGetTimeZone() ) { // we are working with local time tm = wxLocaltime_r(&time, &tmstruct); @@ -374,12 +373,11 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const // used for calls to strftime() when we only deal with time struct tm tmTimeOnly; + memset(&tmTimeOnly, 0, sizeof(tmTimeOnly)); tmTimeOnly.tm_hour = tm.hour; tmTimeOnly.tm_min = tm.min; tmTimeOnly.tm_sec = tm.sec; - tmTimeOnly.tm_wday = 0; - tmTimeOnly.tm_yday = 0; - tmTimeOnly.tm_mday = 1; // any date will do + tmTimeOnly.tm_mday = 1; // any date will do, use 1976-01-01 tmTimeOnly.tm_mon = 0; tmTimeOnly.tm_year = 76; tmTimeOnly.tm_isdst = 0; // no DST, we adjust for tz ourselves @@ -649,9 +647,10 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const default: // is it the format width? - fmt.Empty(); - while ( *p == wxT('-') || *p == wxT('+') || - *p == wxT(' ') || wxIsdigit(*p) ) + for ( fmt.clear(); + *p == wxT('-') || *p == wxT('+') || + *p == wxT(' ') || wxIsdigit(*p); + ++p ) { fmt += *p; } @@ -668,7 +667,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const } // no, it wasn't the width - wxFAIL_MSG(wxT("unknown format specificator")); + wxFAIL_MSG(wxT("unknown format specifier")); // fall through and just copy it nevertheless @@ -1048,11 +1047,12 @@ wxDateTime::ParseFormat(const wxString& date, { wxDateTime dt; +#if wxUSE_INTL const wxString fmtDateTime = wxLocale::GetInfo(wxLOCALE_DATE_TIME_FMT); if ( !fmtDateTime.empty() ) dt = ParseFormatAt(input, end, fmtDateTime); - +#endif // wxUSE_INTL if ( !dt.IsValid() ) { // also try the format which corresponds to ctime() @@ -1269,10 +1269,13 @@ wxDateTime::ParseFormat(const wxString& date, case wxT('x'): // locale default date representation { +#if wxUSE_INTL wxString fmtDate = wxLocale::GetInfo(wxLOCALE_SHORT_DATE_FMT), fmtDateAlt = wxLocale::GetInfo(wxLOCALE_LONG_DATE_FMT); - +#else // !wxUSE_INTL + wxString fmtDate, fmtDateAlt; +#endif // wxUSE_INTL/!wxUSE_INTL if ( fmtDate.empty() ) { if ( IsWestEuropeanCountry(GetCountry()) || @@ -1317,9 +1320,12 @@ wxDateTime::ParseFormat(const wxString& date, case wxT('X'): // locale default time representation { +#if wxUSE_INTL wxString fmtTime = wxLocale::GetInfo(wxLOCALE_TIME_FMT), fmtTimeAlt; - +#else // !wxUSE_INTL + wxString fmtTime, fmtTimeAlt; +#endif // wxUSE_INTL/!wxUSE_INTL if ( fmtTime.empty() ) { // try to parse what follows as "%H:%M:%S" and, if this @@ -1490,10 +1496,9 @@ wxDateTime::ParseDateTime(const wxString& date, wxString::const_iterator *end) { wxCHECK_MSG( end, false, "end iterator pointer must be specified" ); - // Set to current day and hour, so strings like '14:00' becomes today at - // 14, not some other random date - wxDateTime dtDate = wxDateTime::Today(); - wxDateTime dtTime = wxDateTime::Today(); + wxDateTime + dtDate, + dtTime; wxString::const_iterator endTime, @@ -1552,7 +1557,7 @@ wxDateTime::ParseDate(const wxString& date, wxString::const_iterator *end) const wxString::const_iterator pEnd = date.end(); wxString::const_iterator p = pBegin; - while ( wxIsspace(*p) ) + while ( p != pEnd && wxIsspace(*p) ) p++; // some special cases @@ -1619,9 +1624,10 @@ wxDateTime::ParseDate(const wxString& date, wxString::const_iterator *end) while ( p != pEnd ) { // skip white space and date delimiters - while ( wxStrchr(".,/-\t\r\n ", *p) ) + if ( wxStrchr(".,/-\t\r\n ", *p) ) { ++p; + continue; } // modify copy of the iterator as we're not sure if the next token is @@ -1753,7 +1759,7 @@ wxDateTime::ParseDate(const wxString& date, wxString::const_iterator *end) else // not a valid weekday name { // try the ordinals - static const char *ordinals[] = + static const char *const ordinals[] = { wxTRANSLATE("first"), wxTRANSLATE("second"), @@ -1915,14 +1921,13 @@ wxDateTime::ParseTime(const wxString& time, wxString::const_iterator *end) for ( size_t n = 0; n < WXSIZEOF(stdTimes); n++ ) { const wxString timeString = wxGetTranslation(stdTimes[n].name); - const wxString::const_iterator p = time.begin() + timeString.length(); - if ( timeString.CmpNoCase(wxString(time.begin(), p)) == 0 ) + if ( timeString.CmpNoCase(wxString(time, timeString.length())) == 0 ) { // casts required by DigitalMars Set(stdTimes[n].hour, wxDateTime_t(0), wxDateTime_t(0)); if ( end ) - *end = p; + *end = time.begin() + timeString.length(); return true; } @@ -1930,12 +1935,12 @@ wxDateTime::ParseTime(const wxString& time, wxString::const_iterator *end) // try all time formats we may think about in the order from longest to // shortest - static const char *timeFormats[] = + static const char *const timeFormats[] = { "%I:%M:%S %p", // 12hour with AM/PM "%H:%M:%S", // could be the same or 24 hour one so try it too "%I:%M %p", // 12hour with AM/PM but without seconds - "%H:%M:%S", // and a possibly 24 hour version without seconds + "%H:%M", // and a possibly 24 hour version without seconds "%X", // possibly something from above or maybe something // completely different -- try it last