X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7281ab041c780eff2ee6f7c528abafe9e6ff264e..0bd55cfa2c5c18d4e9241cf90195e30d0be5d905:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index f5e71c17a9..b2f65e9f61 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -75,6 +75,8 @@ #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 @@ -190,7 +195,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 +1263,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 +1301,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; } @@ -1734,7 +1739,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 @@ -1770,7 +1775,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; @@ -2563,7 +2568,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 @@ -2819,7 +2824,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 @@ -2963,16 +2968,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? @@ -3059,7 +3084,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 ) { @@ -3103,7 +3128,7 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date) haveDay = TRUE; - day = val; + day = (wxDateTime_t)val; } } else // not a number