-/////////////////////////////////////////////////////////////////////////////
-// Name: date.h
-// Purpose: wxDate class
+///////////////////////////////////////////////////////////////////////////////
+// Name: wx/date.h
+// Purpose: wxDate class: this class is deprecated, use wxDateTime instead!
// Author: Julian Smart, Steve Marcus, Eric Simon, Chris Hill,
// Charles D. Price
-// Modified by:
+// Modified by: 18.12.99 by VZ to use the new wxDateTime class
// Created: 01/02/97
// RCS-ID: $Id$
-// Copyright: (c)
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
+// Copyright:(c)
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_DATE_H_
#define _WX_DATE_H_
#ifdef __GNUG__
-#pragma interface "date.h"
+ #pragma interface "date.h"
#endif
-#include "wx/object.h"
-#include "wx/string.h"
+#include "wx/defs.h"
#if wxUSE_TIMEDATE
-enum wxdate_format_type {wxMDY, wxDAY, wxMONTH, wxFULL, wxEUROPEAN};
+#include "wx/object.h"
+#include "wx/string.h"
+#include "wx/datetime.h"
-#define wxNO_CENTURY 0x02
-#define wxDATE_ABBR 0x04
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxDate: public wxObject
+enum wxdate_format_type
{
- DECLARE_DYNAMIC_CLASS(wxDate)
- protected:
- unsigned long julian; // see julDate(); days since 1/1/4713 B.C.
- int month; // see NMonth()
- int day; // see Day()
- int year; // see NYear4()
- int day_of_week; // see NDOW(); 1 = Sunday, ... 7 = Saturday
-
- private:
- int DisplayFormat;
- unsigned char DisplayOptions;
-
- void julian_to_mdy (); // convert julian day to mdy
- void julian_to_wday (); // convert julian day to day_of_week
- void mdy_to_julian (); // convert mdy to julian day
-
- public:
- wxDate ();
- wxDate (long j);
- wxDate (int m, int d, int y);
- wxDate (const wxString& dat);
- wxDate (const wxDate &dt);
-
-#ifndef __SALFORDC__
- operator wxString (void);
-#endif
-
- void operator = (const wxDate& date);
- void operator = (const wxString& date);
-
- wxDate operator + (long i);
- wxDate operator + (int i);
-
- wxDate operator - (long i);
- wxDate operator - (int i);
-
- long operator - (const wxDate &dt);
-
- wxDate &operator += (long i);
- wxDate &operator -= (long i);
-
- wxDate &operator ++ (); // Prefix increment
- wxDate &operator ++ (int); // Postfix increment
- wxDate &operator -- (); // Prefix decrement
- wxDate &operator -- (int); // Postfix decrement
+ wxMDY,
+ wxDAY,
+ wxMONTH,
+ wxFULL,
+ wxEUROPEAN
+};
- friend bool WXDLLEXPORT operator < (const wxDate &dt1, const wxDate &dt2);
- friend bool WXDLLEXPORT operator <= (const wxDate &dt1, const wxDate &dt2);
- friend bool WXDLLEXPORT operator > (const wxDate &dt1, const wxDate &dt2);
- friend bool WXDLLEXPORT operator >= (const wxDate &dt1, const wxDate &dt2);
- friend bool WXDLLEXPORT operator == (const wxDate &dt1, const wxDate &dt2);
- friend bool WXDLLEXPORT operator != (const wxDate &dt1, const wxDate &dt2);
+enum // wxdate_format_flags
+{
+ wxNO_CENTURY = 0x02,
+ wxDATE_ABBR = 0x04
+};
- friend ostream WXDLLEXPORT & operator << (ostream &os, const wxDate &dt);
+// ----------------------------------------------------------------------------
+// wxDate
+// ----------------------------------------------------------------------------
- wxString FormatDate (int type=-1) const;
- void SetFormat (int format);
- int SetOption (int option, bool enable=TRUE);
+class WXDLLEXPORT wxDate : public wxObject
+{
+public:
+ wxDate() { Init(); }
+ wxDate(long j) : m_date((double)(j + 0.5)) { Init(); }
+ wxDate(int m, int d, int y) : m_date(d, (wxDateTime::Month)m, y) { Init(); }
+ wxDate(const wxString& dat) { Init(); (void)m_date.ParseDate(dat); }
+ wxDate(const wxDate &date) { *this = date; }
- long GetJulianDate() const; // returns julian date
- int GetDayOfYear() const; // returns relative date since Jan. 1
- bool IsLeapYear() const; // returns TRUE if leap year, FALSE if not
+ wxDate(const wxDateTime& dt) { Init(); m_date = dt; }
- // Version 4.0 Extension to Public Interface - CDP
-
- // These 'Set's modify the date object and actually SET it
- // They all return a reference to self (*this)
+#ifndef __SALFORDC__
+ operator wxString() const { return FormatDate(); }
+#endif
- wxDate &Set(); // Sets to current system date
- wxDate &Set(long lJulian);
- wxDate &Set(int nMonth, int nDay, int nYear);
+ void operator=(const wxDate& date)
+ {
+ m_date = date.m_date;
+ m_displayFormat = date.m_displayFormat;
+ m_displayOptions = date.m_displayOptions;
+ }
- wxDate &AddWeeks(int nCount = 1); //
- wxDate &AddMonths(int nCount = 1); // May also pass neg# to decrement
- wxDate &AddYears(int nCount = 1); //
+ void operator=(const wxString& dat) { (void)m_date.ParseDate(dat); }
- int GetDay() const; // Numeric Day of date object
- int GetDaysInMonth(); // Number of days in month (1..31)
- int GetFirstDayOfMonth() const; // First Day Of Month (1..7)
+ wxDate operator+(long i) { return wxDate(GetJulianDate() + i); }
+ wxDate operator+(int i) { return wxDate(GetJulianDate() + (long)i); }
- wxString GetDayOfWeekName(); // Character Day Of Week ('Sunday'..'Saturday')
- int GetDayOfWeek() const; // (1..7)
+ wxDate operator-(long i) { return wxDate(GetJulianDate() - i); }
+ wxDate operator-(int i) { return wxDate(GetJulianDate() - (long)i); }
- int GetWeekOfMonth(); // Numeric Week Of Month (1..6)
- int GetWeekOfYear(); // Numeric Week Of Year (1..52)
+ long operator-(const wxDate &dt) const
+ { return GetJulianDate() - dt.GetJulianDate(); }
- wxString GetMonthName(); // Character Month name
- int GetMonth() const; // Month Number (1..12)
- wxDate GetMonthStart(); // First Date Of Month
- wxDate GetMonthEnd(); // Last Date Of Month
+ wxDate &operator+=(long i) { m_date += wxTimeSpan::Days((int)i); return *this; }
+ wxDate &operator-=(long i) { m_date -= wxTimeSpan::Days((int)i); return *this; }
- int GetYear() const; // eg. 1992
- wxDate GetYearStart(); // First Date Of Year
- wxDate GetYearEnd(); // Last Date Of Year
+ wxDate &operator++() { return *this += 1; }
+ wxDate &operator++(int) { return *this += 1; }
+ wxDate &operator--() { return *this -= 1; }
+ wxDate &operator--(int) { return *this -= 1; }
- bool IsBetween(const wxDate& first, const wxDate& second) const;
+#if wxUSE_STD_IOSTREAM
+ friend ostream WXDLLEXPORT & operator <<(ostream &os, const wxDate &dt)
+ { return os << dt.FormatDate().mb_str(); }
+#endif
- wxDate Previous(int dayOfWeek) const;
+ void SetFormat(int format) { m_displayFormat = format; }
+ int SetOption(int option, bool enable = TRUE)
+ {
+ if ( enable )
+ m_displayOptions |= option;
+ else
+ m_displayOptions &= ~option;
+
+ return 1; // (VZ: whatever it means)
+ }
+
+ // returns julian date (VZ: the integral part of Julian Day Number)
+ long GetJulianDate() const
+ { return (long)(m_date.GetJulianDayNumber() - 0.5); }
+
+ // returns relative date since Jan. 1
+ int GetDayOfYear() const
+ { return m_date.GetDayOfYear(); }
+
+ // returns TRUE if leap year, FALSE if not
+ bool IsLeapYear() const
+ { return wxDateTime::IsLeapYear(m_date.GetYear()); }
+
+ // Sets to current system date
+ wxDate &Set()
+ { m_date = wxDateTime::Today(); return (wxDate&)*this; }
+ wxDate &Set(long lJulian)
+ { m_date.Set((double)(lJulian + 0.5)); return (wxDate&)*this; }
+ wxDate &Set(int nMonth, int nDay, int nYear)
+ { m_date.Set(nDay, (wxDateTime::Month)nMonth, nYear); return *this; }
+
+ // May also pass neg# to decrement
+ wxDate &AddWeeks(int nCount = 1)
+ { m_date += wxDateSpan::Weeks(nCount); return *this; }
+ wxDate &AddMonths(int nCount = 1)
+ { m_date += wxDateSpan::Months(nCount); return *this; }
+ wxDate &AddYears(int nCount = 1)
+ { m_date += wxDateSpan::Years(nCount); return *this; }
+
+ // Numeric Day of date object
+ int GetDay() const { return m_date.GetDay(); }
+ // Number of days in month(1..31)
+ int GetDaysInMonth() const
+ {
+ return wxDateTime::GetNumberOfDays((wxDateTime::Month)m_date.GetMonth(),
+ m_date.GetYear());
+ }
+
+ // First Day Of Month(1..7)
+ int GetFirstDayOfMonth() const
+ { return wxDate(GetMonth(), 1, GetYear()).GetDayOfWeek(); }
+
+ // Character Day Of Week('Sunday'..'Saturday')
+ wxString GetDayOfWeekName() const { return FormatDate(wxDAY); }
+ int GetDayOfWeek() const { return (int)m_date.GetWeekDay() + 1; }
+
+ // Numeric Week Of Month(1..6) (VZ: I'd love to see a month with 6 weeks)
+ int GetWeekOfMonth() const { return m_date.GetWeekOfMonth(); }
+ // Numeric Week Of Year(1..52) (VZ: but there are years with 53 weeks)
+ int GetWeekOfYear() const { return m_date.GetWeekOfYear(); }
+
+ // Character Month name
+ wxString GetMonthName() { return FormatDate(wxMONTH); }
+ // Month Number(1..12)
+ int GetMonth() const { return m_date.GetMonth() + 1; }
+
+ // First Date Of Month
+ wxDate GetMonthStart() const { return(wxDate(GetMonth(), 1, GetYear())); }
+ // Last Date Of Month
+ wxDate GetMonthEnd() const { return wxDate(GetMonth()+1, 1, GetYear())-1; }
+
+ // eg. 1992
+ int GetYear() const { return m_date.GetYear(); }
+ // First Date Of Year
+ wxDate GetYearStart() const { return wxDate(1, 1, GetYear()); }
+ // Last Date Of Year
+ wxDate GetYearEnd() const { return wxDate(1, 1, GetYear()+1) - 1; }
+
+ bool IsBetween(const wxDate& first, const wxDate& second) const
+ {
+ return m_date.IsBetween(first.m_date, second.m_date);
+ }
+
+ wxDate Previous(int dayOfWeek) const
+ {
+ wxDate prev = *this;
+ int dow = GetDayOfWeek();
+ prev -= dayOfWeek > dow ? 7 - (dayOfWeek - dow) : dow - dayOfWeek;
+
+ return prev;
+ }
+
+ wxString FormatDate(int type = -1) const
+ {
+ static const wxChar *formats[] =
+ {
+ // MDY (week)DAY MONTH FULL EUROPEAN
+ _T("%m/%d/%Y"), _T("%A"), _T("%B"), _T("%A, %B %d, %Y"), _T("%d %B %Y")
+ };
+
+ wxString fmt = formats[type == -1 ? m_displayFormat : type];
+
+ if ( m_displayOptions & wxDATE_ABBR )
+ {
+ fmt.Replace(_T("A"), _T("a"));
+ fmt.Replace(_T("B"), _T("b"));
+ }
+ if ( m_displayOptions & wxNO_CENTURY )
+ {
+ fmt.Replace(_T("Y"), _T("y"));
+ }
+
+ return m_date.Format(fmt);
+ }
+
+protected:
+ void Init() { m_displayFormat = wxMDY; m_displayOptions = 0; }
+
+#if 0 // the old wxDate members - unused any more
+ unsigned long julian; // see julDate(); days since 1/1/4713 B.C.
+ int month; // see NMonth()
+ int day; // see Day()
+ int year; // see NYear4()
+ int day_of_week; // see NDOW(); 1 = Sunday, ... 7 = Saturday
+
+ void julian_to_mdy(); // convert julian day to mdy
+ void julian_to_wday(); // convert julian day to day_of_week
+ void mdy_to_julian(); // convert mdy to julian day
+#endif // 0
+
+private:
+ wxDateTime m_date;
+
+ int m_displayFormat;
+ int m_displayOptions;
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxDate)
};
-#endif
+// ----------------------------------------------------------------------------
+// global functions
+// ----------------------------------------------------------------------------
+
+inline bool WXDLLEXPORT operator <(const wxDate &dt1, const wxDate &dt2)
+ { return dt1.GetJulianDate() < dt2.GetJulianDate(); }
+inline bool WXDLLEXPORT operator <=(const wxDate &dt1, const wxDate &dt2)
+ { return dt1.GetJulianDate() <= dt2.GetJulianDate(); }
+inline bool WXDLLEXPORT operator >(const wxDate &dt1, const wxDate &dt2)
+ { return dt1.GetJulianDate() > dt2.GetJulianDate(); }
+inline bool WXDLLEXPORT operator >=(const wxDate &dt1, const wxDate &dt2)
+ { return dt1.GetJulianDate() >= dt2.GetJulianDate(); }
+inline bool WXDLLEXPORT operator ==(const wxDate &dt1, const wxDate &dt2)
+ { return dt1.GetJulianDate() == dt2.GetJulianDate(); }
+inline bool WXDLLEXPORT operator !=(const wxDate &dt1, const wxDate &dt2)
+ { return dt1.GetJulianDate() != dt2.GetJulianDate(); }
+
+#endif // wxUSE_TIMEDATE
#endif
// _WX_DATE_H_