]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/time.cpp
test for timegm() added
[wxWidgets.git] / src / common / time.cpp
index 15936ad32376b275c7ebdea4d34333f885de7e20..1e358e4a09c2c1cee39b4e75db838071e4014b3e 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:    wxWindows license
+// Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
@@ -27,19 +27,22 @@ seconds since January 1, 1901, GMT.
 
 #include "wx/setup.h"
 
-#if USE_TIMEDATE
+#if wxUSE_TIMEDATE
 
 #include "wx/time.h"
 #include "wx/date.h"
 #include "wx/utils.h"
-
-#if USE_IOSTREAMH
-#include <iostream.h>
-#else
-#include <iostream>
+#include "wx/intl.h"
+
+#if wxUSE_STD_IOSTREAM
+    #include "wx/ioswrap.h"
+    #if wxUSE_IOSTREAMH
+        #include <iomanip.h>
+    #else
+        #include <iomanip>
+    #endif
 #endif
 
-#include <iomanip.h>
 #include <string.h>
 
 #if !USE_SHARED_LIBRARY
@@ -55,8 +58,8 @@ static int DST_OBSERVED;        /* flags U.S. daylight saving time observed */
 
 static bool wxTimeInitialized = FALSE;
 
-wxTime::tFormat                wxTime::Format          = wxTime::wx12h;
-wxTime::tPrecision     wxTime::Precision       = wxTime::wxStdMinSec;
+wxTime::tFormat    wxTime::Format    = wxTime::wx12h;
+wxTime::tPrecision  wxTime::Precision  = wxTime::wxStdMinSec;
 
 static const unsigned long seconds_in_day = 24*60*60L;
 static const wxDate refDate(1,1,1901);
@@ -64,19 +67,19 @@ static const wxDate refDate(1,1,1901);
 
 wxTime wxTime::GetLocalTime(const wxDate& date, hourTy h, minuteTy m, secondTy s)
 /*
-                 Return a local wxTime for the specified Standard Time date, hour, minute,
-                 and second.
+      Return a local wxTime for the specified Standard Time date, hour, minute,
+      and second.
 */
 {
   if (!wxTimeInitialized)
   {
-        wxGetLocalTime(&TIME_ZONE, &DST_OBSERVED);
-        wxTimeInitialized = TRUE;
+   wxGetLocalTime(&TIME_ZONE, &DST_OBSERVED);
+   wxTimeInitialized = TRUE;
   }
 /*
-                 if (!date.IsBetween(refDate,maxDate))
-                                        setError(NIHCL_DATERANGE,DEFAULT,
-                                                               date.dayOfMonth(),date.nameOfMonth(),date.year());
+      if (!date.IsBetween(refDate,maxDate))
+           setError(NIHCL_DATERANGE,DEFAULT,
+                date.dayOfMonth(),date.nameOfMonth(),date.year());
 */
   // The following line causes an error in GCC 2.1
 //   long daysBetween = date-refDate;
@@ -90,28 +93,32 @@ wxTime wxTime::GetLocalTime(const wxDate& date, hourTy h, minuteTy m, secondTy s
 
 wxTime::wxTime()
 /*
-                 Construct a wxTime for this instant.
+      Construct a wxTime for this instant.
 */
 {
   if (!wxTimeInitialized)
   {
-        wxGetLocalTime(&TIME_ZONE, &DST_OBSERVED);
-        wxTimeInitialized = TRUE;
+   wxGetLocalTime(&TIME_ZONE, &DST_OBSERVED);
+   wxTimeInitialized = TRUE;
   }
   sec = wxGetCurrentTime();
+#ifdef __SALFORDC__
+  sec += (unsigned long) 2177452800;     /* seconds from 1/1/01 to 1/1/70 */
+#else
   sec += 2177452800UL;     /* seconds from 1/1/01 to 1/1/70 */
+#endif
 }
 
 wxTime::wxTime(hourTy h, minuteTy m, secondTy s, bool dst)
 /*
-                 Construct a wxTime for today at the specified (local) hour, minute, and
-                 second.
+      Construct a wxTime for today at the specified (local) hour, minute, and
+      second.
 */
 {
   if (!wxTimeInitialized)
   {
-        wxGetLocalTime(&TIME_ZONE, &DST_OBSERVED);
-        wxTimeInitialized = TRUE;
+   wxGetLocalTime(&TIME_ZONE, &DST_OBSERVED);
+   wxTimeInitialized = TRUE;
   }
 
   sec = wxTime(wxDate(),h,m,s,dst).sec;
@@ -127,7 +134,7 @@ wxTime::wxTime(const wxDate& date, hourTy h, minuteTy m, secondTy s, bool dst)
   if (!wxTimeInitialized)
   {
     wxGetLocalTime(&TIME_ZONE, &DST_OBSERVED);
-        wxTimeInitialized = TRUE;
+   wxTimeInitialized = TRUE;
   }
   sec = GetLocalTime(date,h,m,s).sec-3600;
   if (IsDST())
@@ -140,25 +147,27 @@ wxTime::wxTime(const wxDate& date, hourTy h, minuteTy m, secondTy s, bool dst)
     sec += 3600;
 /*
                 if (IsDST()) setError(NIHCL_BADTIME,DEFAULT,
-                                                               date.dayOfMonth(),date.nameOfMonth(),date.year(),
-                                                               h,m,s,(dst?"DST":""));
+                date.dayOfMonth(),date.nameOfMonth(),date.year(),
+                h,m,s,(dst?_("DST"):""));
 */
   }
   sec += TIME_ZONE;                               // adjust to GMT
 }
 
+#ifndef __SALFORDC__
 wxTime::operator wxDate() const
 /*
-                 Convert a wxTime to a local wxDate
+      Convert a wxTime to a local wxDate
 */
 {
 //      return wxDate((int)(GetLocalTime().sec/seconds_in_day));     4.2 cc bug
-                 long daycount = (long)(GetLocalTime().sec/seconds_in_day);
+      long daycount = (long)(GetLocalTime().sec/seconds_in_day);
 
         wxDate date(1,1,1901);
         date += daycount;
         return date;
 }
+#endif
 
 bool wxTime::IsBetween(const wxTime& a, const wxTime& b) const
 {
@@ -167,11 +176,11 @@ bool wxTime::IsBetween(const wxTime& a, const wxTime& b) const
 
 hourTy wxTime::GetHour() const
 /*
-                 Return the hour of this wxTime in local time; i.e., adjust for
+      Return the hour of this wxTime in local time; i.e., adjust for
         time zone and Daylight Savings Time.
 */
 {
-                 return GetLocalTime().GetHourGMT();
+      return GetLocalTime().GetHourGMT();
 }
 
 hourTy wxTime::GetHourGMT() const
@@ -179,12 +188,12 @@ hourTy wxTime::GetHourGMT() const
         Return the hour of this Time in GMT.
 */
 {
-                 return (hourTy)((sec % 86400) / 3600);
+      return (hourTy)((sec % 86400) / 3600);
 }
 
 wxTime wxTime::GetBeginDST(unsigned year)
 /*
-                 Return the local Standard Time at which Daylight Savings Time
+      Return the local Standard Time at which Daylight Savings Time
         begins in the specified year.
 */
 {
@@ -192,8 +201,8 @@ wxTime wxTime::GetBeginDST(unsigned year)
         wxTime DSTtime(GetLocalTime(wxDate(3,31,year).Previous(1)+7,2));
         if (year<=1986) {
                 // Previous Sunday
-                                        DSTtime = GetLocalTime(wxDate(4,30,year).Previous(1),2);
-                                        if (year==1974) DSTtime = GetLocalTime(wxDate(1,6,1974),2);
+           DSTtime = GetLocalTime(wxDate(4,30,year).Previous(1),2);
+           if (year==1974) DSTtime = GetLocalTime(wxDate(1,6,1974),2);
                 if (year==1975) DSTtime = GetLocalTime(wxDate(2,23,1975),2);
         }
         return DSTtime;
@@ -205,8 +214,8 @@ wxTime wxTime::GetEndDST(unsigned year)
         ends in the specified year.
 */
 {
-                 wxTime STDtime(GetLocalTime(wxDate(10,31,year).Previous(1),2-1));
-                 return STDtime;
+      wxTime STDtime(GetLocalTime(wxDate(10,31,year).Previous(1),2-1));
+      return STDtime;
 }
 
 bool wxTime::IsDST() const
@@ -218,12 +227,12 @@ bool wxTime::IsDST() const
         long daycount = (long)(sec/seconds_in_day);
 
         // At this point, daycount is the number of days from 1/1/1901.
-                 // Need to convert to julian date (which starts at 1/1/4713 B.C.)
-                 wxDate date(1,1,1901);
+      // Need to convert to julian date (which starts at 1/1/4713 B.C.)
+      wxDate date(1,1,1901);
         date += daycount;
 
         unsigned year = date.GetYear();
-                 if (DST_OBSERVED)
+      if (DST_OBSERVED)
         {
                 if (*this >= GetBeginDST(year))
                         if (*this < GetEndDST(year)) return TRUE;
@@ -236,7 +245,7 @@ wxTime wxTime::GetLocalTime() const
         Adjusts this GM Time for local time zone and Daylight Savings Time.
 */
 {
-                 wxTime local_time(sec-TIME_ZONE);
+      wxTime local_time(sec-TIME_ZONE);
         if (local_time.IsDST()) local_time.sec += 3600;
         return local_time;
 }
@@ -244,7 +253,7 @@ wxTime wxTime::GetLocalTime() const
 minuteTy wxTime::GetMinute() const
 /*
         Return the minute of this wxTime in local time; i.e., adjust
-                 for time zone and Daylight Savings Time.
+      for time zone and Daylight Savings Time.
 */
 {
         return GetLocalTime().GetMinuteGMT();
@@ -255,7 +264,7 @@ minuteTy wxTime::GetMinuteGMT() const
         Return the minute of this wxTime in GMT.
 */
 {
-                 return (minuteTy)(((sec % 86400) % 3600) / 60);
+      return (minuteTy)(((sec % 86400) % 3600) / 60);
 }
 
 secondTy wxTime::GetSecond() const
@@ -263,7 +272,39 @@ secondTy wxTime::GetSecond() const
         Return the second of this wxTime.
 */
 {
-                 return (secondTy)(((sec % 86400) % 3600) % 60);
+      return (secondTy)(((sec % 86400) % 3600) % 60);
+}
+
+secondTy wxTime::GetSecondGMT() const
+/*
+        Return the minute of this wxTime in GMT.
+*/
+{
+        return (secondTy)(((sec % 86400) % 3600) % 60);
+}
+
+int wxTime::GetDay() const
+{
+    wxDate da((wxDate) *this);
+    return da.GetDay();
+}
+
+int wxTime::GetDayOfWeek() const
+{
+    wxDate da((wxDate) *this);
+    return da.GetDayOfWeek();
+}
+
+int wxTime::GetMonth() const
+{
+    wxDate da((wxDate) *this);
+    return da.GetMonth();
+}
+
+int wxTime::GetYear() const
+{
+    wxDate da((wxDate) *this);
+    return da.GetYear();
 }
 
 wxTime wxTime::Max(const wxTime& t) const
@@ -275,55 +316,57 @@ wxTime wxTime::Max(const wxTime& t) const
 wxTime wxTime::Min(const wxTime& t) const
 {
         if (t > *this) return *this;
-                 return t;
+      return t;
 }
 
-wxTime::operator char *(void)
+#ifndef __SALFORDC__
+wxTime::operator wxChar *(void)
 {
   return FormatTime();
 }
+#endif
 
 void wxTime::SetFormat(const wxTime::tFormat lFormat,
-                                                         const wxTime::tPrecision lPrecision) {
+                const wxTime::tPrecision lPrecision) {
 
-       wxTime::Format          = lFormat;
-       wxTime::Precision       = lPrecision;
+  wxTime::Format    = lFormat;
+  wxTime::Precision  = lPrecision;
 }
 
-char *wxTime::FormatTime() const {
-       static char     timeBuf[30];
-       unsigned                hh(GetHour());
+wxChar *wxTime::FormatTime() const {
+  static wxChar  timeBuf[30];
+  unsigned    hh(GetHour());
 
-       switch (Format) {
-       case wx12h:
-               hh      -= 12;
-               break;
-       case wx24h:
-               break;
-       }
+  switch (Format) {
+  case wx12h:
+    hh  -= 12;
+    break;
+  case wx24h:
+    break;
+  }
 
-       switch (Precision) {
-       case wxStdMinSec:
-               sprintf(timeBuf,"%2d:%02d:%02d",hh,GetMinute(),GetSecond());
-               break;
-       case wxStdMin:
-               sprintf(timeBuf,"%2d:%02d",hh,GetMinute());
-               break;
-       }
+  switch (Precision) {
+  case wxStdMinSec:
+    wxSprintf(timeBuf,wxT("%2d:%02d:%02d"),hh,GetMinute(),GetSecond());
+    break;
+  case wxStdMin:
+    wxSprintf(timeBuf,wxT("%2d:%02d"),hh,GetMinute());
+    break;
+  }
 
-       if (Format == wx12h)
-               if (GetHour() <= 12)
-                       strcat(timeBuf,"am");
-               else
-                       strcat(timeBuf,"pm");
+  if (Format == wx12h)
+    if (GetHour() <= 12)
+      wxStrcat(timeBuf,_("am"));
+    else
+      wxStrcat(timeBuf,_("pm"));
 
-       return timeBuf;
+  return timeBuf;
 }
 
 /*
 int wxTime::compare(const Object& ob) const
 {
-                 assertArgSpecies(ob,classDesc,"compare");
+      assertArgSpecies(ob,classDesc,"compare");
         register clockTy t = castdown(ob).sec;
         if (sec < t) return -1;
         if (sec > t) return 1;
@@ -347,16 +390,16 @@ void wxTime::printOn(ostream& strm) const
         wxDate(*this).printOn(strm);
         strm << ' ' << ((hh <= 12) ? hh : hh-12) << ':'
              << setfill('0') << setw(2) << GetMinute() << ':'
-                                << setfill('0') << setw(2) << GetSecond() << ' ';
-        if (hh < 12) strm << "am";
-        else strm << "pm";
+         << setfill('0') << setw(2) << GetSecond() << ' ';
+        if (hh < 12) strm << _("am");
+        else strm << _("pm");
 }
 
 wxTime::wxTime(OIOin& strm)
-                 : BASE(strm)
+      : BASE(strm)
 {
-                 unsigned long usec;
-                 strm >> sec >> usec;
+      unsigned long usec;
+      strm >> sec >> usec;
 }
 
 void wxTime::storer(OIOout& strm) const
@@ -367,16 +410,16 @@ void wxTime::storer(OIOout& strm) const
 
 
 wxTime::wxTime(OIOifd& fd)
-                 : BASE(fd)
+      : BASE(fd)
 {
-                 unsigned long usec;
-                 fd >> sec >> usec;
+      unsigned long usec;
+      fd >> sec >> usec;
 }
 
 void wxTime::storer(OIOofd& fd) const
 {
-                 BASE::storer(fd);
-                 fd << sec << 0l;
+      BASE::storer(fd);
+      fd << sec << 0l;
 }
 */