]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/datetime.cpp
iconv-based conversion works again, after being broken for a while
[wxWidgets.git] / src / common / datetime.cpp
index d95ea2093a1b506ac5e6fe17b00c74f75bd703a6..7dc31201942b12699377b48881284bbecb86462c 100644 (file)
     #pragma hdrstop
 #endif
 
     #pragma hdrstop
 #endif
 
+#if !defined(wxUSE_DATETIME) || wxUSE_DATETIME
+
 #ifndef WX_PRECOMP
     #include "wx/string.h"
 #ifndef WX_PRECOMP
     #include "wx/string.h"
-    #include "wx/intl.h"
     #include "wx/log.h"
 #endif // WX_PRECOMP
 
     #include "wx/log.h"
 #endif // WX_PRECOMP
 
+#include "wx/intl.h"
 #include "wx/thread.h"
 #include "wx/tokenzr.h"
 #include "wx/module.h"
 #include "wx/thread.h"
 #include "wx/tokenzr.h"
 #include "wx/module.h"
         #define WX_TIMEZONE _timezone
     #elif defined(__MWERKS__)
         long wxmw_timezone = 28800;
         #define WX_TIMEZONE _timezone
     #elif defined(__MWERKS__)
         long wxmw_timezone = 28800;
-        #define WX_TIMEZONE wxmw_timezone;
+        #define WX_TIMEZONE wxmw_timezone
+    #elif defined(__DJGPP__)
+        #include <sys/timeb.h>
+        #include <values.h>
+        static long wxGetTimeZone()
+        {
+            static long timezone = MAXLONG; // invalid timezone
+            if (timezone == MAXLONG)
+            {
+                struct timeb tb;
+                ftime(&tb);
+                timezone = tb.timezone;
+            }
+            return timezone;
+        }
+        #define WX_TIMEZONE wxGetTimeZone()
     #else // unknown platform - try timezone
         #define WX_TIMEZONE timezone
     #endif
     #else // unknown platform - try timezone
         #define WX_TIMEZONE timezone
     #endif
@@ -1330,8 +1347,6 @@ wxDateTime::Tm wxDateTime::GetTm(const TimeZone& tz) const
     // check that the algorithm gave us something reasonable
     wxASSERT_MSG( (0 < month) && (month <= 12), _T("invalid month") );
     wxASSERT_MSG( (1 <= day) && (day < 32), _T("invalid day") );
     // check that the algorithm gave us something reasonable
     wxASSERT_MSG( (0 < month) && (month <= 12), _T("invalid month") );
     wxASSERT_MSG( (1 <= day) && (day < 32), _T("invalid day") );
-    wxASSERT_MSG( (INT_MIN <= year) && (year <= INT_MAX),
-                  _T("year range overflow") );
 
     // construct Tm from these values
     Tm tm;
 
     // construct Tm from these values
     Tm tm;
@@ -3373,8 +3388,12 @@ const wxChar *wxDateTime::ParseTime(const wxChar *time)
         }
     }
 
         }
     }
 
-    // try all time formats we may think about starting with the standard one
-    const wxChar *result = ParseFormat(time, _T("%X"));
+    // try all time formats we may think about in the order from longest to
+    // shortest
+
+    // 12hour with AM/PM?
+    const wxChar *result = ParseFormat(time, _T("%I:%M:%S %p"));
+
     if ( !result )
     {
         // normally, it's the same, but why not try it?
     if ( !result )
     {
         // normally, it's the same, but why not try it?
@@ -3383,8 +3402,8 @@ const wxChar *wxDateTime::ParseTime(const wxChar *time)
 
     if ( !result )
     {
 
     if ( !result )
     {
-        // 12hour with AM/PM?
-        result = ParseFormat(time, _T("%I:%M:%S %p"));
+        // 12hour with AM/PM but without seconds?
+        result = ParseFormat(time, _T("%I:%M %p"));
     }
 
     if ( !result )
     }
 
     if ( !result )
@@ -3395,8 +3414,8 @@ const wxChar *wxDateTime::ParseTime(const wxChar *time)
 
     if ( !result )
     {
 
     if ( !result )
     {
-        // 12hour with AM/PM but without seconds?
-        result = ParseFormat(time, _T("%I:%M %p"));
+        // just the hour and AM/PM?
+        result = ParseFormat(time, _T("%I %p"));
     }
 
     if ( !result )
     }
 
     if ( !result )
@@ -3407,8 +3426,9 @@ const wxChar *wxDateTime::ParseTime(const wxChar *time)
 
     if ( !result )
     {
 
     if ( !result )
     {
-        // just the hour and AM/PM?
-        result = ParseFormat(time, _T("%I %p"));
+        // parse the standard format: normally it is one of the formats above
+        // but it may be set to something completely different by the user
+        result = ParseFormat(time, _T("%X"));
     }
 
     // TODO: parse timezones
     }
 
     // TODO: parse timezones
@@ -3708,4 +3728,4 @@ size_t wxDateTimeWorkDays::DoGetHolidaysInRange(const wxDateTime& dtStart,
     return holidays.GetCount();
 }
 
     return holidays.GetCount();
 }
 
-
+#endif // wxUSE_DATETIME