X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4f6aed9c6a21d4bc732579aa564adf4cdb2c9aab..c0eba78b86232bf8c2ef886e0a35808ab09df25f:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index 7fed200c42..eafbeeb586 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -67,14 +67,16 @@ #include "wx/string.h" #include "wx/intl.h" #include "wx/log.h" - #include "wx/module.h" #endif // WX_PRECOMP #include "wx/thread.h" #include "wx/tokenzr.h" +#include "wx/module.h" #define wxDEFINE_TIME_CONSTANTS // before including datetime.h +#include + #include "wx/datetime.h" // ---------------------------------------------------------------------------- @@ -95,6 +97,9 @@ #ifndef WX_TIMEZONE #if defined(__BORLANDC__) || defined(__MINGW32__) || defined(__VISAGECPP__) #define WX_TIMEZONE _timezone + #elif defined(__MWERKS__) + long wxmw_timezone = 28800; + #define WX_TIMEZONE wxmw_timezone ; #else // unknown platform - try timezone #define WX_TIMEZONE timezone #endif @@ -117,6 +122,7 @@ public: virtual void OnExit() { wxDateTimeHolidayAuthority::ClearAllAuthorities(); + wxDateTimeHolidayAuthority::ms_authorities.Clear(); } private: @@ -190,7 +196,7 @@ wxDateTime::Country wxDateTime::ms_country = wxDateTime::Country_Unknown; #ifdef __WXDEBUG__ extern const wxChar *wxDumpDate(const wxDateTime* dt) { - static wxChar buf[20]; + static wxChar buf[128]; wxStrcpy(buf, dt->Format(_T("%Y-%m-%d (%a) %H:%M:%S"))); @@ -1258,18 +1264,18 @@ wxDateTime::Tm wxDateTime::GetTm(const TimeZone& tz) const wxASSERT_MSG( jdn > -2, _T("JDN out of range") ); // calculate the century - int temp = (jdn + JDN_OFFSET) * 4 - 1; - int century = temp / DAYS_PER_400_YEARS; + long temp = (jdn + JDN_OFFSET) * 4 - 1; + long century = temp / DAYS_PER_400_YEARS; // then the year and day of year (1 <= dayOfYear <= 366) temp = ((temp % DAYS_PER_400_YEARS) / 4) * 4 + 3; - int year = (century * 100) + (temp / DAYS_PER_4_YEARS); - int dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1; + long year = (century * 100) + (temp / DAYS_PER_4_YEARS); + long dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1; // and finally the month and day of the month temp = dayOfYear * 5 - 3; - int month = temp / DAYS_PER_5_MONTHS; - int day = (temp % DAYS_PER_5_MONTHS) / 5 + 1; + long month = temp / DAYS_PER_5_MONTHS; + long day = (temp % DAYS_PER_5_MONTHS) / 5 + 1; // month is counted from March - convert to normal if ( month < 10 ) @@ -1296,18 +1302,18 @@ wxDateTime::Tm wxDateTime::GetTm(const TimeZone& tz) const tm.year = (int)year; tm.mon = (Month)(month - 1); // algorithm yields 1 for January, not 0 tm.mday = (wxDateTime_t)day; - tm.msec = timeOnly % 1000; + tm.msec = (wxDateTime_t)(timeOnly % 1000); timeOnly -= tm.msec; timeOnly /= 1000; // now we have time in seconds - tm.sec = timeOnly % 60; + tm.sec = (wxDateTime_t)(timeOnly % 60); timeOnly -= tm.sec; timeOnly /= 60; // now we have time in minutes - tm.min = timeOnly % 60; + tm.min = (wxDateTime_t)(timeOnly % 60); timeOnly -= tm.min; - tm.hour = timeOnly / 60; + tm.hour = (wxDateTime_t)(timeOnly / 60); return tm; } @@ -1636,7 +1642,7 @@ wxDateTime::wxDateTime_t wxDateTime::GetWeekOfMonth(wxDateTime::WeekFlags flags, { Tm tm = GetTm(tz); wxDateTime dtMonthStart = wxDateTime(1, tm.mon, tm.year); - size_t nWeek = GetWeekOfYear(flags) - dtMonthStart.GetWeekOfYear(flags) + 1; + int nWeek = GetWeekOfYear(flags) - dtMonthStart.GetWeekOfYear(flags) + 1; if ( nWeek < 0 ) { // this may happen for January when Jan, 1 is the last week of the @@ -1644,7 +1650,7 @@ wxDateTime::wxDateTime_t wxDateTime::GetWeekOfMonth(wxDateTime::WeekFlags flags, nWeek += IsLeapYear(tm.year - 1) ? 53 : 52; } - return nWeek; + return (wxDateTime::wxDateTime_t)nWeek; } wxDateTime& wxDateTime::SetToYearDay(wxDateTime::wxDateTime_t yday) @@ -1729,7 +1735,7 @@ int wxDateTime::IsDST(wxDateTime::Country country) const wxDateTime& wxDateTime::MakeTimezone(const TimeZone& tz, bool noDST) { - int secDiff = GetTimeZone() + tz.GetOffset(); + long secDiff = GetTimeZone() + tz.GetOffset(); // we need to know whether DST is or not in effect for this date unless // the test disabled by the caller @@ -1765,7 +1771,7 @@ wxString wxDateTime::Format(const wxChar *format, const TimeZone& tz) const } else { - time += tz.GetOffset(); + time += (int)tz.GetOffset(); #ifdef __VMS__ // time is unsigned so avoid the warning int time2 = (int) time; @@ -2558,7 +2564,7 @@ const wxChar *wxDateTime::ParseFormat(const wxChar *date, haveHour = TRUE; hourIsIn12hFormat = TRUE; - hour = num % 12; // 12 should be 0 + hour = (wxDateTime_t)(num % 12); // 12 should be 0 break; case _T('j'): // day of the year @@ -2814,7 +2820,7 @@ const wxChar *wxDateTime::ParseFormat(const wxChar *date, } haveYear = TRUE; - year = 1900 + num; + year = 1900 + (wxDateTime_t)num; break; case _T('Y'): // year with century @@ -2958,16 +2964,36 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date) while ( wxIsspace(*p) ) p++; - wxString today = _T("today"); - size_t len = today.length(); - if ( wxString(p, len).CmpNoCase(today) == 0 ) + // some special cases + static struct + { + const wxChar *str; + int dayDiffFromToday; + } literalDates[] = { - // nothing can follow this, so stop here - p += len; + { wxTRANSLATE("today"), 0 }, + { wxTRANSLATE("yesterday"), -1 }, + { wxTRANSLATE("tomorrow"), 1 }, + }; - *this = Today(); + for ( size_t n = 0; n < WXSIZEOF(literalDates); n++ ) + { + wxString date = wxGetTranslation(literalDates[n].str); + size_t len = date.length(); + if ( wxString(p, len).CmpNoCase(date) == 0 ) + { + // nothing can follow this, so stop here + p += len; - return p; + int dayDiffFromToday = literalDates[n].dayDiffFromToday; + *this = Today(); + if ( dayDiffFromToday ) + { + *this += wxDateSpan::Days(dayDiffFromToday); + } + + return p; + } } // what do we have? @@ -3054,7 +3080,7 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date) haveYear = TRUE; // no roll over - 99 means 99, not 1999 for us - year = val; + year = (wxDateTime_t)val; } else if ( isMonth ) { @@ -3098,7 +3124,7 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date) haveDay = TRUE; - day = val; + day = (wxDateTime_t)val; } } else // not a number @@ -3346,7 +3372,7 @@ wxString wxTimeSpan::Format(const wxChar *format) const wxCHECK_MSG( format, _T(""), _T("NULL format in wxTimeSpan::Format") ); wxString str; - str.Alloc(strlen(format)); + str.Alloc(wxStrlen(format)); for ( const wxChar *pch = format; pch; pch++ ) { @@ -3456,9 +3482,9 @@ wxDateTimeHolidayAuthority::GetHolidaysInRange(const wxDateTime& dtStart, holidays.Empty(); size_t count = ms_authorities.GetCount(); - for ( size_t n = 0; n < count; n++ ) + for ( size_t nAuth = 0; nAuth < count; nAuth++ ) { - ms_authorities[n]->DoGetHolidaysInRange(dtStart, dtEnd, hol); + ms_authorities[nAuth]->DoGetHolidaysInRange(dtStart, dtEnd, hol); WX_APPEND_ARRAY(holidays, hol); } @@ -3524,3 +3550,5 @@ size_t wxDateTimeWorkDays::DoGetHolidaysInRange(const wxDateTime& dtStart, return holidays.GetCount(); } + +