X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3883022093c42e3fb7b248ea2cb4bbd1e056a75b..fc7995487f3032d8415f87619efac7c391c72730:/include/wx/date.h diff --git a/include/wx/date.h b/include/wx/date.h index dc7c7b613a..635457d9d3 100644 --- a/include/wx/date.h +++ b/include/wx/date.h @@ -1,146 +1,256 @@ -///////////////////////////////////////////////////////////////////////////// -// 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) +// 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 -// These lines necessary to stop VC++ 6 being confused about namespaces -class WXDLLEXPORT wxDate; -bool WXDLLEXPORT operator<(const wxDate &dt1, const wxDate &dt2); -bool WXDLLEXPORT operator<(const wxDate &dt1, const wxDate &dt2); -bool WXDLLEXPORT operator <= (const wxDate &dt1, const wxDate &dt2); -bool WXDLLEXPORT operator > (const wxDate &dt1, const wxDate &dt2); -bool WXDLLEXPORT operator >= (const wxDate &dt1, const wxDate &dt2); -bool WXDLLEXPORT operator == (const wxDate &dt1, const wxDate &dt2); -bool WXDLLEXPORT operator != (const wxDate &dt1, const wxDate &dt2); -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 + wxMDY, + wxDAY, + wxMONTH, + wxFULL, + wxEUROPEAN +}; -private: - int DisplayFormat; - unsigned char DisplayOptions; +enum // wxdate_format_flags +{ + wxNO_CENTURY = 0x02, + wxDATE_ABBR = 0x04 +}; - 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 +// ---------------------------------------------------------------------------- +// wxDate +// ---------------------------------------------------------------------------- +class WXDLLEXPORT wxDate : public wxObject +{ public: - wxDate (); - wxDate (long j); - wxDate (int m, int d, int y); - wxDate (const wxString& dat); - wxDate (const wxDate &dt); + 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; } + + wxDate(const wxDateTime& dt) { Init(); m_date = dt; } #ifndef __SALFORDC__ - operator wxString (void); + operator wxString() const { return FormatDate(); } #endif - void operator = (const wxDate& date); - void operator = (const wxString& date); + void operator=(const wxDate& date) + { + m_date = date.m_date; + m_displayFormat = date.m_displayFormat; + m_displayOptions = date.m_displayOptions; + } - wxDate operator + (long i); - wxDate operator + (int i); + void operator=(const wxString& dat) { (void)m_date.ParseDate(dat); } - wxDate operator - (long i); - wxDate operator - (int i); + wxDate operator+(long i) { return wxDate(GetJulianDate() + i); } + wxDate operator+(int i) { return wxDate(GetJulianDate() + (long)i); } - long operator - (const wxDate &dt); + wxDate operator-(long i) { return wxDate(GetJulianDate() - i); } + wxDate operator-(int i) { return wxDate(GetJulianDate() - (long)i); } - wxDate &operator += (long i); - wxDate &operator -= (long i); + long operator-(const wxDate &dt) const + { return GetJulianDate() - dt.GetJulianDate(); } - wxDate &operator ++ (); // Prefix increment - wxDate &operator ++ (int); // Postfix increment - wxDate &operator -- (); // Prefix decrement - wxDate &operator -- (int); // Postfix decrement + wxDate &operator+=(long i) { m_date += wxTimeSpan::Days((int)i); return *this; } + wxDate &operator-=(long i) { m_date -= wxTimeSpan::Days((int)i); return *this; } - 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); + wxDate &operator++() { return *this += 1; } + wxDate &operator++(int) { return *this += 1; } + wxDate &operator--() { return *this -= 1; } + wxDate &operator--(int) { return *this -= 1; } #if wxUSE_STD_IOSTREAM - friend ostream WXDLLEXPORT & operator << (ostream &os, const wxDate &dt); + friend wxSTD ostream WXDLLEXPORT & operator <<(wxSTD ostream &os, const wxDate &dt) + { return os << dt.FormatDate().mb_str(); } #endif - wxString FormatDate (int type=-1) const; - void SetFormat (int format); - int SetOption (int option, bool enable=TRUE); - - 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 - - // 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) + 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, 1, GetYear())); } + // Last Date Of Month + wxDate GetMonthEnd() const { return wxDate(GetMonth(), 1, GetYear())-1; } + + // eg. 1992 + int GetYear() const { return m_date.GetYear(); } + // First Date Of Year + wxDate GetYearStart() const { return wxDate(0, 1, GetYear()); } + // Last Date Of Year + wxDate GetYearEnd() const { return wxDate(0, 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); + } - wxDate &Set(); // Sets to current system date - wxDate &Set(long lJulian); - wxDate &Set(int nMonth, int nDay, int nYear); - - wxDate &AddWeeks(int nCount = 1); // - wxDate &AddMonths(int nCount = 1); // May also pass neg# to decrement - wxDate &AddYears(int nCount = 1); // - - 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) - - wxString GetDayOfWeekName(); // Character Day Of Week ('Sunday'..'Saturday') - int GetDayOfWeek() const; // (1..7) +protected: + void Init() { m_displayFormat = wxMDY; m_displayOptions = 0; } - int GetWeekOfMonth(); // Numeric Week Of Month (1..6) - int GetWeekOfYear(); // Numeric Week Of Year (1..52) +#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 - wxString GetMonthName(); // Character Month name - int GetMonth() const; // Month Number (1..12) - wxDate GetMonthStart(); // First Date Of Month - wxDate GetMonthEnd(); // Last Date Of Month + 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 - int GetYear() const; // eg. 1992 - wxDate GetYearStart(); // First Date Of Year - wxDate GetYearEnd(); // Last Date Of Year +private: + wxDateTime m_date; - bool IsBetween(const wxDate& first, const wxDate& second) const; + int m_displayFormat; + int m_displayOptions; - wxDate Previous(int dayOfWeek) const; +private: + DECLARE_DYNAMIC_CLASS(wxDate) }; +// ---------------------------------------------------------------------------- +// 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_