]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/date.cpp
Changed BidEndianOrdered to BigEndianOrdered in datstrm.h
[wxWidgets.git] / src / common / date.cpp
index bd67ec071a02ddd1b0f4c47f697cd5346130fbc1..809730cd698a9f24c77e54d762155fb5a9c4b320 100644 (file)
@@ -8,11 +8,11 @@
 //    Still Further Enhanced by Hill & Simon  v3.10         8/05/91
 //    Version 4 by Charles D. Price                         6/27/92
 //    Integrated into wxWindows by Julian Smart             9th July 1995
-// Modified by:        
+// Modified by:
 // Created:     01/02/97
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+  #pragma hdrstop
 #endif
 
-#include "wx/setup.h"
-
 #if wxUSE_TIMEDATE
 
 #include "wx/date.h"
-#include <wx/intl.h>
+#include "wx/intl.h"
 
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 
-#if wxUSE_IOSTREAMH
-#include <iostream.h>
-#else
-#include <iostream>
-#endif
+#include "wx/ioswrap.h"
 
 #include <time.h>
 #include <string.h>
 
 #define ABBR_LENGTH 3
 
-static const char *dayname[] = {
-  "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
+static const wxChar *dayname[] = {
+    _T("Sunday"), _T("Monday"), _T("Tuesday"), _T("Wednesday"),
+    _T("Thursday"), _T("Friday"), _T("Saturday")
 };
 
-static const char *mname[] = {
-  "January", "February", "March", "April", "May", "June", "July", "August",
-  "September", "October", "November", "December"
+static const wxChar *mname[] = {
+    _T("January"), _T("February"), _T("March"), _T("April"), _T("May"), _T("June"),
+    _T("July"), _T("August"), _T("September"), _T("October"), _T("November"), _T("December")
 };
 
 static int GauDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
@@ -63,96 +58,96 @@ static int GauDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 IMPLEMENT_DYNAMIC_CLASS(wxDate, wxObject)
 #endif
 
-////////////////////////////////////////////////////////////
-// Constructors
-////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////
+    // Constructors
+    ////////////////////////////////////////////////////////////
 
 wxDate::wxDate()
 {
-  DisplayFormat=wxMDY;
-  DisplayOptions='\0';
-  month = day = year = day_of_week = 0;
-  julian = 0;
+    DisplayFormat=wxMDY;
+    DisplayOptions='\0';
+    month = day = year = day_of_week = 0;
+    julian = 0;
 }
 
 wxDate::wxDate (long j) : julian(j)
 {
-  DisplayFormat=wxMDY;
-  DisplayOptions='\0';
-  julian_to_mdy ();
+    DisplayFormat=wxMDY;
+    DisplayOptions='\0';
+    julian_to_mdy ();
 }
 
 wxDate::wxDate (int m, int d, int y) : month(m), day(d), year(y)
 {
-  DisplayFormat=wxMDY;
-  DisplayOptions='\0';
-  mdy_to_julian ();
+    DisplayFormat=wxMDY;
+    DisplayOptions='\0';
+    mdy_to_julian ();
 }
 
 wxDate::wxDate (const wxString& dat)
 {
-  DisplayFormat=wxMDY;
-  DisplayOptions='\0';
-  if (strcmp(dat, "TODAY") == 0 || strcmp(dat, "today") == 0)
-  {
-    // Sets the current date
-    Set();
-  }
-  else
-  {
-    char buf[100];
-    strcpy(buf, (char *) (const char *)dat);
-
-    char *token = strtok(buf,"/-");
-    month = atoi(token);
-    day   = atoi(strtok((char *) NULL,"/-"));
-    year  = atoi(strtok((char *) NULL," "));
-  }
+    DisplayFormat=wxMDY;
+    DisplayOptions='\0';
+    if (wxStrcmp(dat, _T("TODAY")) == 0 || wxStrcmp(dat, _T("today")) == 0)
+    {
+        // Sets the current date
+        Set();
+    }
+    else
+    {
+        wxChar buf[100];
+        wxStrcpy(buf, WXSTRINGCAST dat);
+
+        wxChar *save_ptr, *token = wxStrtok(buf,_T("/-"),&save_ptr);
+        month = wxAtoi(token);
+        day   = wxAtoi(wxStrtok((wxChar *) NULL,_T("/-"),&save_ptr));
+        year  = wxAtoi(wxStrtok((wxChar *) NULL,_T(" "),&save_ptr));
+    }
 
-  mdy_to_julian ();
+    mdy_to_julian ();
 }
 
 wxDate::wxDate (const wxDate &dt)
 {
-  DisplayFormat=dt.DisplayFormat;
-  DisplayOptions=dt.DisplayOptions;
-  month = dt.month;
-  day   = dt.day;
-  year  = dt.year;
-  mdy_to_julian ();
+    DisplayFormat=dt.DisplayFormat;
+    DisplayOptions=dt.DisplayOptions;
+    month = dt.month;
+    day   = dt.day;
+    year  = dt.year;
+    mdy_to_julian ();
 }
 
 void wxDate::operator = (const wxDate &dt)
 {
-  DisplayFormat=dt.DisplayFormat;
-  DisplayOptions=dt.DisplayOptions;
-  month = dt.month;
-  day   = dt.day;
-  year  = dt.year;
-  mdy_to_julian ();
+    DisplayFormat=dt.DisplayFormat;
+    DisplayOptions=dt.DisplayOptions;
+    month = dt.month;
+    day   = dt.day;
+    year  = dt.year;
+    mdy_to_julian (); // wxUSE_TIMEDATE
 }
 
 void wxDate::operator = (const wxString& dat)
 {
-  DisplayFormat=wxMDY;
-  DisplayOptions='\0';
-  if (strcmp(dat, "TODAY") == 0 || strcmp(dat, "today") == 0)
-  {
-    // Sets the current date
-    Set();
-  }
-  else
-  {
-    char buf[100];
-    strcpy(buf, (char *)(const char *)dat);
-
-    char *token = strtok(buf,"/-");
-    month = atoi(token);
-    day   = atoi(strtok((char *) NULL,"/-"));
-    year  = atoi(strtok((char *) NULL," "));
-  }
+    DisplayFormat=wxMDY;
+    DisplayOptions='\0';
+    if (wxStrcmp(dat, _T("TODAY")) == 0 || wxStrcmp(dat, _T("today")) == 0)
+    {
+        // Sets the current date
+        Set();
+    }
+    else
+    {
+        wxChar buf[100];
+        wxStrcpy(buf, WXSTRINGCAST dat);
+
+        wxChar *save_ptr, *token = wxStrtok(buf,_T("/-"),&save_ptr);
+        month = wxAtoi(token);
+        day   = wxAtoi(wxStrtok((wxChar *) NULL,_T("/-"),&save_ptr));
+        year  = wxAtoi(wxStrtok((wxChar *) NULL,_T(" "),&save_ptr));
+    }
 
-  mdy_to_julian ();
+    mdy_to_julian ();
 }
 
 //////////////////////////////////////////////////////////////
@@ -162,7 +157,7 @@ void wxDate::operator = (const wxString& dat)
 #ifndef __SALFORDC__
 wxDate::operator wxString( void )
 {
-  return FormatDate();
+    return FormatDate();
 }
 #endif
 
@@ -172,73 +167,73 @@ wxDate::operator wxString( void )
 
 wxDate wxDate::operator + (long i)
 {
-  wxDate dp(julian + i);
-  return dp;
+    wxDate dp(julian + i);
+    return dp;
 }
 
 wxDate wxDate::operator + (int i)
 {
-  wxDate dp(julian + (long)i);
-  return dp;
+    wxDate dp(julian + (long)i);
+    return dp;
 }
 
 wxDate wxDate::operator - (long i)
 {
-  wxDate dp(julian - i);
-  return dp;
+    wxDate dp(julian - i);
+    return dp;
 }
 
 wxDate wxDate::operator - (int i)
 {
-  wxDate dp(julian - (long)i);
-  return dp;
+    wxDate dp(julian - (long)i);
+    return dp;
 }
 
 long wxDate::operator - (const wxDate &dt)
 {
-       return ( julian - dt.julian );
+    return ( julian - dt.julian );
 }
 
 wxDate &wxDate::operator += (long i)
 {
-        julian += i;
-     julian_to_mdy();
-        return *this;
+    julian += i;
+    julian_to_mdy();
+    return *this;
 }
 
 wxDate &wxDate::operator -= (long i)
 {
-        julian -= i;
-     julian_to_mdy();
-        return *this;
+    julian -= i;
+    julian_to_mdy();
+    return *this;
 }
 
 wxDate &wxDate::operator ++()
 {
-       julian++;
+    julian++;
     julian_to_mdy();
-       return *this;
+    return *this;
 }
 
 wxDate &wxDate::operator ++(int)
 {
-       julian++;
+    julian++;
     julian_to_mdy();
-       return *this;
+    return *this;
 }
 
 wxDate &wxDate::operator --()
 {
-       julian--;
+    julian--;
     julian_to_mdy();
-       return *this;
+    return *this;
 }
 
 wxDate &wxDate::operator --(int)
 {
-       julian--;
+    julian--;
     julian_to_mdy();
-       return *this;
+    return *this;
 }
 
 //////////////////////////////////////////////////////////////
@@ -247,92 +242,101 @@ wxDate &wxDate::operator --(int)
 
 bool WXDLLEXPORT operator <  (const wxDate &dt1, const wxDate &dt2)
 {
-       return ( dt1.julian < dt2.julian );
+    return ( dt1.julian < dt2.julian );
 }
 
 bool WXDLLEXPORT operator <= (const wxDate &dt1, const wxDate &dt2)
 {
-       return ( (dt1.julian == dt2.julian) || (dt1.julian < dt2.julian) );
+    return ( (dt1.julian == dt2.julian) || (dt1.julian < dt2.julian) );
 }
 
 bool WXDLLEXPORT operator >  (const wxDate &dt1, const wxDate &dt2)
 {
-       return ( dt1.julian > dt2.julian );
+    return ( dt1.julian > dt2.julian );
 }
 
 bool WXDLLEXPORT operator >= (const wxDate &dt1, const wxDate &dt2)
 {
-       return ( (dt1.julian == dt2.julian) || (dt1.julian > dt2.julian) );
+    return ( (dt1.julian == dt2.julian) || (dt1.julian > dt2.julian) );
 }
 
 bool WXDLLEXPORT operator == (const wxDate &dt1, const wxDate &dt2)
 {
-       return ( dt1.julian == dt2.julian );
+    return ( dt1.julian == dt2.julian );
 }
 
 bool WXDLLEXPORT operator != (const wxDate &dt1, const wxDate &dt2)
 {
-       return ( dt1.julian != dt2.julian );
+    return ( dt1.julian != dt2.julian );
 }
 
+
+#if wxUSE_STD_IOSTREAM
+
 ////////////////////////////////////////////////////////////////
 // Ostream operations
 ////////////////////////////////////////////////////////////////
 
-ostream& WXDLLEXPORT operator << (ostream &os, const wxDate &dt)
+ostream WXDLLEXPORT & operator << (ostream &os, const wxDate &dt)
 {
-       return os << (const char *) dt.FormatDate();
+    return os << dt.FormatDate().mb_str();
 }
 
+#endif
+
 //////////////////////////////////////////////////////////////
 // Conversion routines
 //////////////////////////////////////////////////////////////
 
 void wxDate::julian_to_wday (void)
 {
-       day_of_week = (int) ((julian + 2) % 7 + 1);
+    // Correction by Peter Stadel <peters@jetcity.com>
+       day_of_week = ((julian - 2) % 7L);
+/*
+    day_of_week = (int) ((julian + 2) % 7 + 1);
+*/
 }
 
 void wxDate::julian_to_mdy ()
 {
-       long a,b,c,d,e,z,alpha;
-       z = julian+1;
-       // dealing with Gregorian calendar reform
+    long a,b,c,d,e,z,alpha;
+    z = julian+1;
+    // dealing with Gregorian calendar reform
     if (z < 2299161L)
-       a = z;
+        a = z;
     else {
-       alpha = (long) ((z-1867216.25) / 36524.25);
-       a = z + 1 + alpha - alpha/4;
+        alpha = (long) ((z-1867216.25) / 36524.25);
+        a = z + 1 + alpha - alpha/4;
     }
-       b = ( a > 1721423 ? a + 1524 : a + 1158 );
-       c = (long) ((b - 122.1) / 365.25);
-       d = (long) (365.25 * c);
-       e = (long) ((b - d) / 30.6001);
+    b = ( a > 1721423 ? a + 1524 : a + 1158 );
+    c = (long) ((b - 122.1) / 365.25);
+    d = (long) (365.25 * c);
+    e = (long) ((b - d) / 30.6001);
     day = (int)(b - d - (long)(30.6001 * e));
     month = (int)((e < 13.5) ? e - 1 : e - 13);
     year = (int)((month > 2.5 ) ? (c - 4716) : c - 4715);
-       julian_to_wday ();
+    julian_to_wday ();
 }
 
 void wxDate::mdy_to_julian (void)
 {
-       int a,b=0;
-       int work_month=month, work_day=day, work_year=year;
-       // correct for negative year
+    int a,b=0;
+    int work_month=month, work_day=day, work_year=year;
+    // correct for negative year
     if (work_year < 0)
-               work_year++;
-       if (work_month <= 2)
-               { work_year--; work_month +=12; }
+        work_year++;
+    if (work_month <= 2)
+    { work_year--; work_month +=12; }
 
-       // deal with Gregorian calendar
-       if (work_year*10000. + work_month*100. + work_day >= 15821015.)
-               {
+    // deal with Gregorian calendar
+    if (work_year*10000. + work_month*100. + work_day >= 15821015.)
+    {
         a = (int)(work_year/100.);
-               b = 2 - a + a/4;
-               }
-       julian = (long) (365.25*work_year) +
-                        (long) (30.6001 * (work_month+1))  +  work_day + 1720994L + b;
-       julian_to_wday ();
+        b = 2 - a + a/4;
+    }
+    julian = (long) (365.25*work_year) +
+        (long) (30.6001 * (work_month+1))  +  work_day + 1720994L + b;
+    julian_to_wday ();
 }
 
 ////////////////////////////////////////////////////////////////
@@ -341,107 +345,107 @@ void wxDate::mdy_to_julian (void)
 
 wxString wxDate::FormatDate (int type) const
 {
-  int actualType = type;
-  if (actualType == -1)
-    actualType = DisplayFormat;
+    int actualType = type;
+    if (actualType == -1)
+        actualType = DisplayFormat;
 
-    char buf[40];
+    wxChar buf[40];
 
     memset( buf, '\0', sizeof(buf) );
-       switch ( actualType )
-       {
-               case wxDAY:
-                       if ( (day_of_week < 1) || (day_of_week > 7) )
-                               strcpy(buf, _("invalid day"));
-                       else
-                               strncpy( buf, _(dayname[day_of_week-1]),
-                                       (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
-                       return wxString(buf);
-
-               case wxMONTH:
-                       if ( (month < 1) || (month > 12) )
-                               strcpy(buf, _("invalid month"));
-                       else
-                               strncpy( buf, _(mname[month-1]),
-                                       (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
-                       return wxString(buf);
-
-               case wxFULL:
-                       if ( (month < 1) || (month > 12) || (day_of_week < 0) ||
-                                (day_of_week > 7) )
-                       {
-                               strcpy(buf, _("invalid date"));
-                               return wxString(buf);
-                       }
-                       strncpy( buf, _(dayname[day_of_week-1]),
-                               (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
-                       strcat( buf, ", ");
-                       strncat( buf, _(mname[month-1]),
-                               (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
-                       strcat( buf, " ");
-                       sprintf( buf+strlen(buf), "%d, %d", day, abs(year) );
-                       if (year < 0)
-                               strcat(buf,_(" B.C."));
-                       return wxString(buf);
-
-               case wxEUROPEAN:
-                       if ( (month < 1) || (month > 12) || (day_of_week < 0) ||
-                                (day_of_week > 7) )
-                       {
-                               strcpy(buf, _("invalid date"));
-                               return wxString(buf);
-                       }
-                       sprintf(buf,"%d ",      day);
-                       strncat(buf, _(mname[month-1]),
-                               (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
-                       sprintf( buf+strlen(buf), " %d", abs(year) );
-                       if (year < 0)
-                               strcat(buf, _(" B.C."));
-                       return wxString(buf);
-
-               case wxMDY:
-               default:
-                       if (day==0 || month==0 || year==0)
-                               strcpy(buf, _("invalid date"));
-                       else
-                               sprintf( buf+strlen(buf), "%1d/%1d/%02d", month, day,
-                                       (DisplayOptions & wxNO_CENTURY) && (abs(year) > 1899)
-                                       ? (abs(year) - (abs(year) / 100 * 100))
-                                       : (abs(year))  );
-                       return wxString(buf);
-       }
-  return wxString("");
+    switch ( actualType )
+    {
+        case wxDAY:
+            if ( (day_of_week < 1) || (day_of_week > 7) )
+                wxStrcpy(buf, _("invalid day"));
+            else
+                wxStrncpy( buf, wxGetTranslation(dayname[day_of_week-1]),
+                          (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
+            return wxString(buf);
+
+        case wxMONTH:
+            if ( (month < 1) || (month > 12) )
+                wxStrcpy(buf, _("invalid month"));
+            else
+                wxStrncpy( buf, wxGetTranslation(mname[month-1]),
+                          (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
+            return wxString(buf);
+
+        case wxFULL:
+            if ( (month < 1) || (month > 12) || (day_of_week < 0) ||
+                    (day_of_week > 7) )
+            {
+                wxStrcpy(buf, _("invalid date"));
+                return wxString(buf);
+            }
+            wxStrncpy( buf, wxGetTranslation(dayname[day_of_week-1]),
+                      (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
+            wxStrcat( buf, _T(", "));
+            wxStrncat( buf, wxGetTranslation(mname[month-1]),
+                      (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
+            wxStrcat( buf, _T(" "));
+            wxSprintf( buf+wxStrlen(buf), _T("%d, %d"), day, abs(year) );
+            if (year < 0)
+                wxStrcat(buf,_(" B.C."));
+            return wxString(buf);
+
+        case wxEUROPEAN:
+            if ( (month < 1) || (month > 12) || (day_of_week < 0) ||
+                    (day_of_week > 7) )
+            {
+                wxStrcpy(buf, _("invalid date"));
+                return wxString(buf);
+            }
+            wxSprintf(buf,_T("%d "),  day);
+            wxStrncat(buf, wxGetTranslation(mname[month-1]),
+                    (DisplayOptions & wxDATE_ABBR) ? ABBR_LENGTH : 9);
+            wxSprintf( buf+wxStrlen(buf), _T(" %d"), abs(year) );
+            if (year < 0)
+                wxStrcat(buf, _(" B.C."));
+            return wxString(buf);
+
+        case wxMDY:
+        default:
+            if (day==0 || month==0 || year==0)
+                wxStrcpy(buf, _("invalid date"));
+            else
+                wxSprintf( buf+wxStrlen(buf), _T("%1d/%1d/%02d"), month, day,
+                          (DisplayOptions & wxNO_CENTURY) && (abs(year) > 1899)
+                          ? (abs(year) - (abs(year) / 100 * 100))
+                          : (abs(year))  );
+            return wxString(buf);
+    }
+    return wxString(_T(""));
 }
 
 void wxDate::SetFormat( int format )
 {
-       DisplayFormat = format;
+    DisplayFormat = format;
 }
 
 int wxDate::SetOption( int option, bool action )
 {
-       switch ( option )
-       {
-               case wxNO_CENTURY:
-                       if ( action )
-                               DisplayOptions |= wxNO_CENTURY;
-                       else
-                       {
-                               DisplayOptions &= (~wxNO_CENTURY);
-                       }
-                       return 1;
-               case wxDATE_ABBR:
-                       if ( action )
-                               DisplayOptions |= wxDATE_ABBR;
-                       else
-                       {
-                               DisplayOptions &= (~wxDATE_ABBR);
-                       }
-                       return 1;
-               default:
-                       return 0;
-       }
-  return 0;
+    switch ( option )
+    {
+        case wxNO_CENTURY:
+            if ( action )
+                DisplayOptions |= wxNO_CENTURY;
+            else
+            {
+                DisplayOptions &= (~wxNO_CENTURY);
+            }
+            return 1;
+        case wxDATE_ABBR:
+            if ( action )
+                DisplayOptions |= wxDATE_ABBR;
+            else
+            {
+                DisplayOptions &= (~wxDATE_ABBR);
+            }
+            return 1;
+        default:
+            return 0;
+    }
+    return 0;
 }
 
 ///////////////////////////////////////////////////////////////
@@ -450,29 +454,29 @@ int wxDate::SetOption( int option, bool action )
 
 long wxDate::GetJulianDate( void ) const
 {
-       return julian;
+    return julian;
 }
 
 int wxDate::GetDayOfYear( void ) const
 {
-       wxDate temp( 1, 1, year );
+    wxDate temp( 1, 1, year );
 
-       return (int) (julian - temp.julian + 1);
+    return (int) (julian - temp.julian + 1);
 }
 
 
 bool wxDate::IsLeapYear( void ) const
 {
-       return  ( (year >= 1582) ?
-                         (year % 4 == 0  &&  year % 100 != 0  ||  year % 400 == 0 ):
-                         (year % 4 == 0) );
+    return  ( (year >= 1582) ?
+            (year % 4 == 0  &&  year % 100 != 0  ||  year % 400 == 0 ):
+            (year % 4 == 0) );
 }
 
 // Version 4.0 Extension to Public Interface - CDP
 
 wxDate& wxDate::Set()
 {
-//#ifdef __WXMSW__
+    //#ifdef __WXMSW__
 #if 0
     struct _dosdate_t sDate;
     _dos_getdate(&sDate);
@@ -496,9 +500,9 @@ wxDate& wxDate::Set()
 }
 
 wxDate& wxDate::Set(
-       int     nMonth,
-       int     nDay,
-       int     nYear)
+        int  nMonth,
+        int  nDay,
+        int  nYear)
 {
     month = nMonth;
     year  = nYear < 0 ? 9999 : nYear;
@@ -506,16 +510,16 @@ wxDate& wxDate::Set(
     day   = nDay < GetDaysInMonth() ? nDay : GetDaysInMonth();
 
     mdy_to_julian();
-       return *this;
+    return *this;
 }
 
 wxDate &
 wxDate::Set(long j)
 {
-  julian = j;
+    julian = j;
 
-  julian_to_mdy();
-  return *this;
+    julian_to_mdy();
+    return *this;
 }
 
 
@@ -562,12 +566,12 @@ wxDate& wxDate::AddMonths(int nCount)
     if (month < 1) {
         month = 12;
         year--;
-       }
+    }
 
     if (month > 12) {
         month = 1;
         year++;
-       }
+    }
     mdy_to_julian();
     return *this;
 }
@@ -581,10 +585,10 @@ wxDate& wxDate::AddYears(int nCount)
 
 int wxDate::GetWeekOfMonth()
 {
-  // Abs day includes the days from previous month that fills up
-  // the begin. of the week.
-  int nAbsDay = day + GetFirstDayOfMonth()-1;
-  return (nAbsDay-GetDayOfWeek())/7 + 1;
+    // Abs day includes the days from previous month that fills up
+    // the begin. of the week.
+    int nAbsDay = day + GetFirstDayOfMonth()-1;
+    return (nAbsDay-GetDayOfWeek())/7 + 1;
 }
 
 int wxDate::GetWeekOfYear()
@@ -625,32 +629,32 @@ wxString wxDate::GetDayOfWeekName()
 
 bool wxDate::IsBetween(const wxDate& first, const wxDate& second) const
 {
-  return (julian >= first.julian && julian <= second.julian);
+    return (julian >= first.julian && julian <= second.julian);
 }
 
 // This function is from NIHCL
 wxDate wxDate::Previous(int dayOfWeek) const
 {
-        int this_day_Of_Week, desired_day_Of_Week;
-        long j;
+    int this_day_Of_Week, desired_day_Of_Week;
+    long j;
 
-//      Set the desired and current day of week to start at 0 (Monday)
-//      and end at 6 (Sunday).
+    //      Set the desired and current day of week to start at 0 (Monday)
+    //      and end at 6 (Sunday).
 
-        desired_day_Of_Week = dayOfWeek - 1; // These functions return a value
-        this_day_Of_Week    = GetDayOfWeek() - 1;            // from 1-7.  Subtract 1 for 0-6.
-        j = julian;
+    desired_day_Of_Week = dayOfWeek - 1; // These functions return a value
+    this_day_Of_Week    = GetDayOfWeek() - 1;            // from 1-7.  Subtract 1 for 0-6.
+    j = julian;
 
-//      Have to determine how many days difference from current day back to
-//      desired, if any.  Special calculation under the 'if' statement to
-//      effect the wraparound counting from Monday (0) back to Sunday (6).
+    //      Have to determine how many days difference from current day back to
+    //      desired, if any.  Special calculation under the 'if' statement to
+    //      effect the wraparound counting from Monday (0) back to Sunday (6).
 
-        if (desired_day_Of_Week > this_day_Of_Week)
-                this_day_Of_Week += 7 - desired_day_Of_Week;
-        else
-                this_day_Of_Week -= desired_day_Of_Week;
-        j -= this_day_Of_Week; // Adjust j to set it at the desired day of week.
-        return wxDate(j);
+    if (desired_day_Of_Week > this_day_Of_Week)
+        this_day_Of_Week += 7 - desired_day_Of_Week;
+    else
+        this_day_Of_Week -= desired_day_Of_Week;
+    j -= this_day_Of_Week; // Adjust j to set it at the desired day of week.
+    return wxDate(j);
 }
 
 #endif