home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2000 February
/
PCWorld_2000-02_cd.bin
/
Software
/
TemaCD
/
tcvpa
/
data1.cab
/
MyFileGroup
/
INCLUDE
/
DateTime.hpp
< prev
next >
Wrap
C/C++ Source or Header
|
1999-06-03
|
11KB
|
251 lines
#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