X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4f0436e4655b628b32c4e9b27837c400e46c3746..1152bba2806f7a40e09e6b4c6d2ada108bb570cb:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index 84cc559e76..a042dd5947 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -84,7 +84,9 @@ #ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #include - #include + #ifndef __WXWINCE__ + #include + #endif #endif #include "wx/datetime.h" @@ -125,6 +127,18 @@ wxCUSTOM_TYPE_INFO(wxDateTime, wxToStringConverter , wxFromStringCon #undef HAVE_STRPTIME #endif // broken strptime() +#if defined(HAVE_STRPTIME) && defined(__DARWIN__) && defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS + // configure detects strptime as linkable because it's in the OS X + // System library but MSL headers don't declare it. + +// char *strptime(const char *, const char *, struct tm *); + // However, we DON'T want to just provide it here because we would + // crash and/or overwrite data when strptime from OS X tries + // to fill in MW's struct tm which is two fields shorter (no TZ stuff) + // So for now let's just say we don't have strptime + #undef HAVE_STRPTIME +#endif + #if defined(__MWERKS__) && wxUSE_UNICODE #include #endif @@ -357,11 +371,12 @@ static long GetTruncatedJDN(wxDateTime::wxDateTime_t day, - JDN_OFFSET; } +#ifndef __WXWINCE__ // this function is a wrapper around strftime(3) adding error checking static wxString CallStrftime(const wxChar *format, const tm* tm) { wxChar buf[4096]; - if ( !wxStrftime(buf, WXSIZEOF(buf), format, tm) ) + if ( !wxStrftime(buf, WXSIZEOF(buf), format, tm) ) { // buffer is too small? wxFAIL_MSG(_T("strftime() failed")); @@ -369,6 +384,7 @@ static wxString CallStrftime(const wxChar *format, const tm* tm) return wxString(buf); } +#endif #ifdef HAVE_STRPTIME @@ -825,47 +841,47 @@ wxString wxDateTime::GetMonthName(wxDateTime::Month month, return CallStrftime(flags == Name_Abbr ? _T("%b") : _T("%B"), &tm); #else - wxString ret; - switch(month) - { - case Jan: - ret = (flags == Name_Abbr ? wxT("Jan"): wxT("January")); - break; - case Feb: - ret = (flags == Name_Abbr ? wxT("Feb"): wxT("Febuary")); - break; - case Mar: - ret = (flags == Name_Abbr ? wxT("Mar"): wxT("March")); - break; - case Apr: - ret = (flags == Name_Abbr ? wxT("Apr"): wxT("April")); - break; - case May: - ret = (flags == Name_Abbr ? wxT("May"): wxT("May")); - break; - case Jun: - ret = (flags == Name_Abbr ? wxT("Jun"): wxT("June")); - break; - case Jul: - ret = (flags == Name_Abbr ? wxT("Jul"): wxT("July")); - break; - case Aug: - ret = (flags == Name_Abbr ? wxT("Aug"): wxT("August")); - break; - case Sep: - ret = (flags == Name_Abbr ? wxT("Sep"): wxT("September")); - break; - case Oct: - ret = (flags == Name_Abbr ? wxT("Oct"): wxT("October")); - break; - case Nov: - ret = (flags == Name_Abbr ? wxT("Nov"): wxT("November")); - break; - case Dec: - ret = (flags == Name_Abbr ? wxT("Dec"): wxT("December")); - break; - } - return ret; + wxString ret; + switch(month) + { + case Jan: + ret = (flags == Name_Abbr ? wxT("Jan"): wxT("January")); + break; + case Feb: + ret = (flags == Name_Abbr ? wxT("Feb"): wxT("Febuary")); + break; + case Mar: + ret = (flags == Name_Abbr ? wxT("Mar"): wxT("March")); + break; + case Apr: + ret = (flags == Name_Abbr ? wxT("Apr"): wxT("April")); + break; + case May: + ret = (flags == Name_Abbr ? wxT("May"): wxT("May")); + break; + case Jun: + ret = (flags == Name_Abbr ? wxT("Jun"): wxT("June")); + break; + case Jul: + ret = (flags == Name_Abbr ? wxT("Jul"): wxT("July")); + break; + case Aug: + ret = (flags == Name_Abbr ? wxT("Aug"): wxT("August")); + break; + case Sep: + ret = (flags == Name_Abbr ? wxT("Sep"): wxT("September")); + break; + case Oct: + ret = (flags == Name_Abbr ? wxT("Oct"): wxT("October")); + break; + case Nov: + ret = (flags == Name_Abbr ? wxT("Nov"): wxT("November")); + break; + case Dec: + ret = (flags == Name_Abbr ? wxT("Dec"): wxT("December")); + break; + } + return ret; #endif } @@ -893,32 +909,32 @@ wxString wxDateTime::GetWeekDayName(wxDateTime::WeekDay wday, // ... and call strftime() return CallStrftime(flags == Name_Abbr ? _T("%a") : _T("%A"), &tm); #else - wxString ret; - switch(wday) - { - case Sun: - ret = (flags == Name_Abbr ? wxT("Sun") : wxT("Sunday")); - break; - case Mon: - ret = (flags == Name_Abbr ? wxT("Mon") : wxT("Monday")); - break; - case Tue: - ret = (flags == Name_Abbr ? wxT("Tue") : wxT("Tuesday")); - break; - case Wed: - ret = (flags == Name_Abbr ? wxT("Wed") : wxT("Wednesday")); - break; - case Thu: - ret = (flags == Name_Abbr ? wxT("Thu") : wxT("Thursday")); - break; - case Fri: - ret = (flags == Name_Abbr ? wxT("Fri") : wxT("Friday")); - break; - case Sat: - ret = (flags == Name_Abbr ? wxT("Sat") : wxT("Saturday")); - break; - } - return ret; + wxString ret; + switch(wday) + { + case Sun: + ret = (flags == Name_Abbr ? wxT("Sun") : wxT("Sunday")); + break; + case Mon: + ret = (flags == Name_Abbr ? wxT("Mon") : wxT("Monday")); + break; + case Tue: + ret = (flags == Name_Abbr ? wxT("Tue") : wxT("Tuesday")); + break; + case Wed: + ret = (flags == Name_Abbr ? wxT("Wed") : wxT("Wednesday")); + break; + case Thu: + ret = (flags == Name_Abbr ? wxT("Thu") : wxT("Thursday")); + break; + case Fri: + ret = (flags == Name_Abbr ? wxT("Fri") : wxT("Friday")); + break; + case Sat: + ret = (flags == Name_Abbr ? wxT("Sat") : wxT("Saturday")); + break; + } + return ret; #endif } @@ -1818,8 +1834,9 @@ wxDateTime& wxDateTime::SetToWeekDayInSameWeek(WeekDay weekday, WeekFlags flags) { wxDATETIME_CHECK( weekday != Inv_WeekDay, _T("invalid weekday") ); - int wdayThis = GetWeekDay(); - if ( weekday == wdayThis ) + int wdayDst = weekday, + wdayThis = GetWeekDay(); + if ( wdayDst == wdayThis ) { // nothing to do return *this; @@ -1833,21 +1850,23 @@ wxDateTime& wxDateTime::SetToWeekDayInSameWeek(WeekDay weekday, WeekFlags flags) // the logic below based on comparing weekday and wdayThis works if Sun (0) // is the first day in the week, but breaks down for Monday_First case so // we adjust the week days in this case - if( flags == Monday_First ) + if ( flags == Monday_First ) { if ( wdayThis == Sun ) wdayThis += 7; + if ( wdayDst == Sun ) + wdayDst += 7; } //else: Sunday_First, nothing to do // go forward or back in time to the day we want - if ( weekday < wdayThis ) + if ( wdayDst < wdayThis ) { - return Subtract(wxDateSpan::Days(wdayThis - weekday)); + return Subtract(wxDateSpan::Days(wdayThis - wdayDst)); } else // weekday > wdayThis { - return Add(wxDateSpan::Days(weekday - wdayThis)); + return Add(wxDateSpan::Days(wdayDst - wdayThis)); } } @@ -2197,7 +2216,7 @@ wxString wxDateTime::Format(const wxChar *format, const TimeZone& tz) const } } #ifndef __WXWINCE__ - //Windows CE doesn't support strftime or wcsftime, so we use the generic implementation + //Windows CE doesn't support strftime or wcsftime, so we use the generic implementation if ( tm ) { return CallStrftime(format, tm); @@ -2412,9 +2431,9 @@ wxString wxDateTime::Format(const wxChar *format, const TimeZone& tz) const res += str; } #else - //Use "%m/%d/%y %H:%M:%S" format instead - res += wxString::Format(wxT("%02d/%02d/%04d %02d:%02d:%02d"), - tm.mon+1,tm.mday, tm.year, tm.hour, tm.min, tm.sec); + //Use "%m/%d/%y %H:%M:%S" format instead + res += wxString::Format(wxT("%02d/%02d/%04d %02d:%02d:%02d"), + tm.mon+1,tm.mday, tm.year, tm.hour, tm.min, tm.sec); #endif break; @@ -2455,7 +2474,7 @@ wxString wxDateTime::Format(const wxChar *format, const TimeZone& tz) const #ifndef __WXWINCE__ res += CallStrftime(_T("%p"), &tmTimeOnly); #else - res += (tmTimeOnly.tm_hour > 12) ? wxT("pm") : wxT("am"); + res += (tmTimeOnly.tm_hour > 12) ? wxT("pm") : wxT("am"); #endif break; @@ -2482,7 +2501,7 @@ wxString wxDateTime::Format(const wxChar *format, const TimeZone& tz) const #ifndef __WXWINCE__ res += CallStrftime(_T("%X"), &tmTimeOnly); #else - res += wxString::Format(wxT("%02d:%02d:%02d"),tm.hour, tm.min, tm.sec); + res += wxString::Format(wxT("%02d:%02d:%02d"),tm.hour, tm.min, tm.sec); #endif break; @@ -2735,7 +2754,7 @@ const wxChar *wxDateTime::ParseRfc822Date(const wxChar* date) } // and now the interesting part: the timezone - int offset; + int offset wxDUMMY_INITIALIZE(0); if ( *p == _T('-') || *p == _T('+') ) { // the explicit offset given: it has the form of hhmm @@ -2843,9 +2862,9 @@ const wxChar *wxDateTime::ParseRfc822Date(const wxChar* date) // the locale is set; otherwise or in case of failure, leaves fmt unchanged static void GetLocaleDateFormat(wxString *fmt) { - // there is no setlocale() under Windows CE with Standard SDK, so just - // always query the system there -#ifndef WCE_PLATFORM_STANDARDSDK + // there is no setlocale() under Windows CE, so just always query the + // system there +#ifndef __WXWINCE__ if ( strcmp(setlocale(LC_ALL, NULL), "C") != 0 ) #endif { @@ -3194,6 +3213,7 @@ const wxChar *wxDateTime::ParseFormat(const wxChar *date, hour = tm.hour; min = tm.min; } + break; case _T('S'): // second as a decimal number (00-61) if ( !GetNumericToken(width, input, &num) || (num > 61) )