]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/datetime.cpp
unicode compilation fix
[wxWidgets.git] / src / common / datetime.cpp
index 4f1df66c7ec2d0fc4acd85e9c93f2dae9ab96ee3..19236b62d8b89280f71bdad3b2d7035780106145 100644 (file)
@@ -52,7 +52,7 @@
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma implementation "datetime.h"
 #endif
 
 #include "wx/tokenzr.h"
 #include "wx/module.h"
 
-#define wxDEFINE_TIME_CONSTANTS // before including datetime.h
-
 #include <ctype.h>
 
 #include "wx/datetime.h"
-#include "wx/timer.h"           // for wxGetLocalTimeMillis()
+#include "wx/stopwatch.h"           // for wxGetLocalTimeMillis()
 
 const long wxDateTime::TIME_T_FACTOR = 1000l;
 
@@ -162,7 +160,7 @@ public:
     virtual void OnExit()
     {
         wxDateTimeHolidayAuthority::ClearAllAuthorities();
-        wxDateTimeHolidayAuthority::ms_authorities.Clear();
+        wxDateTimeHolidayAuthority::ms_authorities.clear();
     }
 
 private:
@@ -224,16 +222,6 @@ const wxDateTime wxDefaultDateTime;
 
 wxDateTime::Country wxDateTime::ms_country = wxDateTime::Country_Unknown;
 
-// ----------------------------------------------------------------------------
-// private globals
-// ----------------------------------------------------------------------------
-
-// a critical section is needed to protect GetTimeZone() static
-// variable in MT case
-#if wxUSE_THREADS
-    static wxCriticalSection gs_critsectTimezone;
-#endif // wxUSE_THREADS
-
 // ----------------------------------------------------------------------------
 // private functions
 // ----------------------------------------------------------------------------
@@ -269,13 +257,10 @@ wxDateTime::wxDateTime_t GetNumOfDaysInMonth(int year, wxDateTime::Month month)
 // (in seconds)
 static int GetTimeZone()
 {
+#ifdef WX_GMTOFF_IN_TM
     // set to TRUE when the timezone is set
     static bool s_timezoneSet = FALSE;
-#ifdef WX_GMTOFF_IN_TM
     static long gmtoffset = LONG_MAX; // invalid timezone
-#endif
-
-    wxCRIT_SECT_LOCKER(lock, gs_critsectTimezone);
 
     // ensure that the timezone variable is set by calling localtime
     if ( !s_timezoneSet )
@@ -288,19 +273,16 @@ static int GetTimeZone()
         tm = localtime(&t);
         s_timezoneSet = TRUE;
 
-#ifdef WX_GMTOFF_IN_TM
         // note that GMT offset is the opposite of time zone and so to return
         // consistent results in both WX_GMTOFF_IN_TM and !WX_GMTOFF_IN_TM
         // cases we have to negate it
         gmtoffset = -tm->tm_gmtoff;
-#endif
     }
 
-#ifdef WX_GMTOFF_IN_TM
     return (int)gmtoffset;
-#else
+#else // !WX_GMTOFF_IN_TM
     return (int)WX_TIMEZONE;
-#endif
+#endif // WX_GMTOFF_IN_TM/!WX_GMTOFF_IN_TM
 }
 
 // return the integral part of the JDN for the midnight of the given date (to
@@ -358,6 +340,12 @@ static wxString CallStrftime(const wxChar *format, const tm* tm)
 
 #ifdef HAVE_STRPTIME
 
+// glibc2 doesn't define this in the headers unless _XOPEN_SOURCE is defined
+// which, unfortunately, wreaks havoc elsewhere
+#if defined(__GLIBC__) && (__GLIBC__ == 2)
+    extern "C" char *strptime(const char *, const char *, struct tm *);
+#endif
+
 // Unicode-friendly strptime() wrapper
 static const wxChar *
 CallStrptime(const wxChar *input, const char *fmt, tm *tm)
@@ -2682,7 +2670,7 @@ const wxChar *wxDateTime::ParseFormat(const wxChar *date,
 
         // parse the optional width
         size_t width = 0;
-        while ( isdigit(*++fmt) )
+        while ( wxIsdigit(*++fmt) )
         {
             width *= 10;
             width += *fmt - _T('0');
@@ -3197,6 +3185,14 @@ const wxChar *wxDateTime::ParseFormat(const wxChar *date,
 
     Set(tm);
 
+    // finally check that the week day is consistent -- if we had it
+    if ( haveWDay && GetWeekDay() != wday )
+    {
+        wxLogDebug(_T("inconsistsnet week day in wxDateTime::ParseFormat()"));
+
+        return NULL;
+    }
+
     return input;
 }
 
@@ -3816,7 +3812,7 @@ wxHolidayAuthoritiesArray wxDateTimeHolidayAuthority::ms_authorities;
 /* static */
 bool wxDateTimeHolidayAuthority::IsHoliday(const wxDateTime& dt)
 {
-    size_t count = ms_authorities.GetCount();
+    size_t count = ms_authorities.size();
     for ( size_t n = 0; n < count; n++ )
     {
         if ( ms_authorities[n]->DoIsHoliday(dt) )
@@ -3836,9 +3832,9 @@ wxDateTimeHolidayAuthority::GetHolidaysInRange(const wxDateTime& dtStart,
 {
     wxDateTimeArray hol;
 
-    holidays.Empty();
+    holidays.Clear();
 
-    size_t count = ms_authorities.GetCount();
+    size_t count = ms_authorities.size();
     for ( size_t nAuth = 0; nAuth < count; nAuth++ )
     {
         ms_authorities[nAuth]->DoGetHolidaysInRange(dtStart, dtEnd, hol);
@@ -3848,7 +3844,7 @@ wxDateTimeHolidayAuthority::GetHolidaysInRange(const wxDateTime& dtStart,
 
     holidays.Sort(wxDateTimeCompareFunc);
 
-    return holidays.GetCount();
+    return holidays.size();
 }
 
 /* static */
@@ -3860,7 +3856,7 @@ void wxDateTimeHolidayAuthority::ClearAllAuthorities()
 /* static */
 void wxDateTimeHolidayAuthority::AddAuthority(wxDateTimeHolidayAuthority *auth)
 {
-    ms_authorities.Add(auth);
+    ms_authorities.push_back(auth);
 }
 
 wxDateTimeHolidayAuthority::~wxDateTimeHolidayAuthority()