home *** CD-ROM | disk | FTP | other *** search
- #ifndef _INC_DATETIME_HPP
- #define _INC_DATETIME_HPP
- class TC_CDate;
- class TC_CTime;
- TC_COREEX_EXPORT TC_CString tcStr (TC_CDate & dt, char * fmt = 0) ;
- TC_COREEX_EXPORT TC_CString tcStr (TC_CTime tm, char * fmt = 0) ;
- extern TC_COREEX_EXPORT TC_CDate tcNullDate ;
- extern TC_COREEX_EXPORT TC_CTime tcNullTime ;
- /*
- * %c Country dependent date
- */
-
- #define DATEFMT_DATE_SEP 0x00000001L // %- Date separator
- #define DATEFMT_ABBR_WEEKDAY 0x00000002L // %a Abbreviated weekday name
- #define DATEFMT_FULL_WEEKDAY 0x00000004L // %A Full weekday name
- #define DATEFMT_WEEKDAY_NUM 0x00000008L // %w Weekday as a decimal number (0-6; Sunday is 0)
- #define DATEFMT_ABBR_MONTH 0x00000010L // %b Abbreviated month name
- #define DATEFMT_FULL_MONTH 0x00000020L // %B Full month name
- #define DATEFMT_DAY_OF_MONTH 0x00000040L // %d Day of the month as a decimal number (01-31)
- #define DATEFMT_DAY_OF_YEAR 0x00000080L // %j Day of the year as a decimal number (000-365)
- #define DATEFMT_MONTH_NUM 0x00000100L // %m Month as a decimal number (01-12)
- #define DATEFMT_YEAR4 0x00000200L // %Y Year with the century as a decimal number
- #define DATEFMT_YEAR2 0x00000400L // %y Year without the century as a decimal number (00-99)
- #define DATEFMT_CURR_YEAR 0x00000800L // %1 Current year if no year specified, otherwise 1900
- #define DATEFMT_CURR_MONTH 0x00001000L // %2 Current month if no month specified, otherwise 1st month
- #define DATEFMT_CURR_DAY 0x00002000L // %3 Current day if no day specified, otherwise 1st day
- #define DATEFMT_CURRENT 0x00004000L // %T Current date/time component if one of them is not specified
- #define TC_INVALID_JULNUM 0xFFFFFFFFL
- #define TC_INVALID_SECONDS 0xFFFFFFFFL
-
- // **********************************************************************
- class TC_COREEX_EXPORT TC_CDate
- {
- friend TC_CTime;
- friend inline TC_CDate operator + (TC_CDate &dt, int dd) { return TC_CDate(dt.m_Julnum + dd); }
- friend inline TC_CDate operator + (int dd, TC_CDate &dt) { return TC_CDate(dt.m_Julnum + dd); }
- friend inline TC_CDate operator - (TC_CDate &dt, int dd) { return TC_CDate(dt.m_Julnum - dd); }
- private: ULONG m_Julnum ;
- public: TC_CDate () ;
- public: TC_CDate (const TC_CDate & dt)
- {
- Set(((TC_CDate*)(&dt))->Get());
- } // end of func
- // **********************************************************************
-
- public: TC_CDate (int day, int year) ;
- public: TC_CDate ( int day, char * monthName, int year ) ;
- public: TC_CDate ( int year, int month, int day ) ;
- public: TC_CDate (const char * str, char * fmt = 0) ;
- public: TC_CDate (TC_CTime & t) ;
- public: TC_CDate ( ULONG j ) ;
- public: static int AssertIndexOfMonth (int m)
- {
- return m>=1 && m<=12;
- } // end of func
- // **********************************************************************
-
- public: static int AssertWeekDayNumber (int d)
- {
- return d>=1 && d<=7;
- } // end of func
- // **********************************************************************
-
- public: static char * DayName ( int weekDayNumber, BOOL IsShort = FALSE) ;
- public: static int DayOfWeek ( char * nameOfDay, BOOL IsShort = FALSE) ;
- public: static int FindMatch ( char * str, char ** candidates, int icand ) ;
- public: static int DayWithinMonth ( int year, int month, int day ) ;
- public: static int DaysInYear ( int year )
- {
- // How many days are in the given int year?
- return IsLeapYear(year) ? 366 : 365;
- } // end of func
- // **********************************************************************
-
- public: static int DaysPerMonth (int year, int month) ;
- public: static ULONG Jday ( int y, int m, int d ) ;
- public: static int IndexOfMonth ( char * nameOfMonth ) ;
- public: static BOOL IsLeapYear ( int year ) ;
- public: static char * MonthName ( int monthNumber ) ;
- public: static int HashValue (TC_CDate & d) ;
- public: TC_CDate & operator = (const TC_CDate & dt) ;
- public:
-
- int operator < ( TC_CDate & date ) { return m_Julnum < date.m_Julnum; }
- int operator <= ( TC_CDate & date ) { return m_Julnum <= date.m_Julnum; }
- int operator > ( TC_CDate & date ) { return m_Julnum > date.m_Julnum; }
- int operator >= ( TC_CDate & date ) { return m_Julnum >= date.m_Julnum; }
- int operator == ( TC_CDate & date ) { return m_Julnum == date.m_Julnum; }
- int operator != ( TC_CDate & date ) { return m_Julnum != date.m_Julnum; }
- ULONG operator - ( TC_CDate & dt ) { return m_Julnum - dt.m_Julnum; }
-
- void operator ++ () { m_Julnum += 1; }
- void operator ++ ( int ) { m_Julnum += 1; }
- void operator -- () { m_Julnum -= 1; }
- void operator -- ( int ) { m_Julnum -= 1; }
- void operator += ( int dd ) { m_Julnum += dd; }
- void operator -= ( int dd ) { m_Julnum -= dd; }
- public: int Between (TC_CDate & d1, TC_CDate & d2) ;
- public: int Day () ;
- public: int DayOfMonth () ;
- public: int DaysPerMonth () ;
- public: int FirstDayOfMonth ( int month ) ;
- public: int FirstDayOfMonth () ;
- public: int FirstWeekDay () ;
- public: int LastWeekDay () ;
- public: BOOL IsNull () ;
- public: void SetNull () ;
- public: void SetInvalid ()
- {
- m_Julnum = TC_INVALID_JULNUM;
- } // end of func
- // **********************************************************************
-
- public: int IsValid ()
- {
- return m_Julnum != TC_INVALID_JULNUM;
- } // end of func
- // **********************************************************************
-
- public: BOOL IsLeapYear () ;
- public: TC_CDate Max (TC_CDate & dt) ;
- public: TC_CDate Min (TC_CDate & dt) ;
- public: int Month () ;
- public: char * NameOfDay (BOOL IsShort = FALSE) ;
- public: char * NameOfMonth () ;
- public: void ChangeMonth (int delta, int day=0) ;
- public: int Compare (TC_CDate & d) ;
- public: int Hash () ;
- public: TC_CDate Previous (char * dayName) ;
- public: TC_CDate Previous ( int desiredDayOfWeek ) ;
- public: void Set (ULONG Jnum)
- {
- m_Julnum = Jnum;
- } // end of func
- // **********************************************************************
-
- public: ULONG Get () ;
- public: void SetDate ( int y, int m, int d ) ;
- public: void SetDateTr ( int y, int m, int d ) ;
- public: void SetDay (int d) ;
- public: void SetDayTr (int d) ;
- public: int WeekDay () ;
- public: void YMD ( int & y, int & m, int & D ) ;
- public: int Year () ;
- public: void SetCurrent () ;
- public: BOOL SetDate (const char * str = 0, const char * fmt = 0) ;
- public: TC_CString Format (const char * fmt = 0) ;
- public: BOOL Format (TC_CString &s, const char * fmt = 0) ;
- public: BOOL IsFmtValid (const char * fmt) ;
-
- }; // end of class TC_CDate
-
- // **********************************************************************
- /*
- * %C Country dependent format
- * %h Hundredths of seconds
- * %I Hour in 12-hour format (01-12)
- * %p Current locale's AM/PM indicator for a 12-hour clock(followed by default PM hours)
- */
-
- #define TIMEFMT_TIME_SEP 0x00010000L // %: Time separator is next charater
- #define TIMEFMT_HOUR24 0x00020000L // %H Hour in 24-hour format (00-23)
- #define TIMEFMT_MINUTE 0x00040000L // %M Minute as a decimal number (00-59)
- #define TIMEFMT_SECOND 0x00080000L // %S Seconds as a decimal number (00-59)
- #define TIMEFMT_CURR_HOUR 0x00100000L // %4 Current hour if no specified, otherwise 0
- #define TIMEFMT_CURR_MINUTE 0x00200000L // %5 Current minute if no specified, otherwise 0
- #define TIMEFMT_CURR_SECOND 0x00400000L // %6 Current second if no specified, otherwise 0
-
- // **********************************************************************
- class TC_COREEX_EXPORT TC_CTime
- {
- friend TC_CDate;
- public:
-
- // Boolean operators.
- int TC_CTime::operator < ( TC_CTime & t ) { return m_Sec < t.m_Sec; }
- int TC_CTime::operator <= ( TC_CTime & t ) { return m_Sec <= t.m_Sec; }
- int TC_CTime::operator > ( TC_CTime & t ) { return m_Sec > t.m_Sec; }
- int TC_CTime::operator >= ( TC_CTime & t ) { return m_Sec >= t.m_Sec; }
- int TC_CTime::operator == ( TC_CTime & t ) { return m_Sec == t.m_Sec; }
- int TC_CTime::operator != ( TC_CTime & t ) { return m_Sec != t.m_Sec; }
-
- // Add or subtract seconds.
- friend TC_CTime operator + ( TC_CTime & t, long s ) { return TC_CTime(t.m_Sec+s); }
- friend TC_CTime operator + ( long s, TC_CTime & t ) { return TC_CTime(t.m_Sec+s); }
- friend TC_CTime operator - ( TC_CTime & t, long s ) { return TC_CTime(t.m_Sec-s); }
- friend TC_CTime operator - ( long s, TC_CTime & t ) { return TC_CTime(t.m_Sec-s); }
-
- void TC_CTime::operator ++ () { m_Sec += 1; }
- void TC_CTime::operator ++ ( int ) { m_Sec += 1; }
- void TC_CTime::operator -- () { m_Sec -= 1; }
- void TC_CTime::operator -- ( int ) { m_Sec -= 1; }
- void TC_CTime::operator += (long s) { m_Sec += s; }
- void TC_CTime::operator -= (long s) { m_Sec -= s; }
-
- TC_CTime & TC_CTime::operator = (const TC_CTime & tm ) { m_Sec = ((TC_CTime*)(&tm))->Get(); return (*this); }
- private: ULONG m_Sec ;
- protected: static TC_CDate m_RefDate ;
- protected: static TC_CDate m_MaxDate ;
- public: TC_CTime () ;
- public: TC_CTime ( int h, int m, int s = 0) ;
- public: TC_CTime (TC_CDate & date, int h=0, int m=0, int s=0) ;
- public: TC_CTime (TC_CTime & tm) ;
- public: TC_CTime (const char * str, char * fmt = 0) ;
- public: TC_CTime ( ULONG s ) ;
- public: static int AssertDate (TC_CDate & date) ;
- public: static TC_CTime BeginDST (int year) ;
- public: static TC_CTime BuildLocal (TC_CDate & date, int h) ;
- public: static TC_CTime EndDST (int year) ;
- public: static unsigned HashValue (TC_CTime & t) ;
- public: int Between (TC_CTime & a, TC_CTime & b) ;
- public: int Compare (TC_CTime & t) ;
- public: unsigned Hash () ;
- public: int Hour () ;
- public: int HourGMT () ;
- public: ULONG Get () ;
- public: void Set (ULONG secs) ;
- public: int IsDST () ;
- public: void SetInvalid ()
- {
- m_Sec = TC_INVALID_SECONDS;
- } // end of func
- // **********************************************************************
-
- public: int IsValid ()
- {
- return m_Sec != TC_INVALID_SECONDS;
- } // end of func
- // **********************************************************************
-
- public: BOOL IsNull () ;
- public: void SetNull () ;
- private: ULONG LocalSecs () ;
- public: TC_CTime Max (TC_CTime & t) ;
- public: TC_CTime Min (TC_CTime & t) ;
- public: int Minute () ;
- public: int MinuteGMT () ;
- public: ULONG Seconds () ;
- public: ULONG Second () ;
- public: void SetCurrent () ;
- public: BOOL SetTime (const char * str = 0, const char * fmt = 0) ;
- public: TC_CString Format (const char * fmt = 0) ;
- public: BOOL Format (TC_CString &s, const char * fmt = 0) ;
- public: BOOL IsFmtValid (const char * fmt) ;
-
- }; // end of class TC_CTime
-
- // **********************************************************************
-
- #endif // _INC_DATETIME_HPP
-