00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __MySQLaux_Date_h__
00025 #define __MySQLaux_Date_h__
00026
00027 #include "Exception.h"
00028 #include <string>
00029 #include <sstream>
00030
00031 namespace MySQLaux
00032 {
00036 class InvalidDate
00037 : public Exception
00038 {
00039 public:
00040 inline string asString() const throw()
00041 {
00042 return "Invalid date";
00043 }
00044 };
00045
00049 class Date
00050 {
00051 private:
00052 unsigned _year;
00053 unsigned _month;
00054 unsigned _day;
00055 public:
00062 Date (const char * s) throw (InvalidDate);
00063
00067 inline Date () throw() { _year = _month = _day = 0; }
00068
00072 inline unsigned day() const throw (InvalidDate)
00073 {
00074 if (_day == 0 || _day > 31)
00075 throw InvalidDate();
00076 return _day;
00077 }
00078
00082 inline unsigned month() const throw (InvalidDate)
00083 {
00084 if (_month == 0 || _month > 12)
00085 throw InvalidDate();
00086 return _month;
00087 }
00088
00092 inline unsigned year() const throw (InvalidDate)
00093 {
00094 if (_year < 1000 | _year > 9999)
00095 throw InvalidDate();
00096 return _year;
00097 }
00098
00108 string asString(unsigned format) const throw (InvalidDate);
00109
00114 unsigned long asBCD () const throw (InvalidDate);
00115 };
00116 }
00117
00122 bool operator< (MySQLaux::Date const & date1,
00123 MySQLaux::Date const & date2)
00124 throw (MySQLaux::InvalidDate);
00125
00126 bool operator== (MySQLaux::Date const & date1,
00127 MySQLaux::Date const & date2)
00128 throw (MySQLaux::InvalidDate);
00129
00130 inline bool operator<= (MySQLaux::Date const & date1,
00131 MySQLaux::Date const & date2)
00132 throw (MySQLaux::InvalidDate)
00133 {
00134 return (date1 < date2 || date1 == date2);
00135 }
00136
00137 inline bool operator!= (MySQLaux::Date const & date1,
00138 MySQLaux::Date const & date2)
00139 throw (MySQLaux::InvalidDate)
00140 {
00141 return (!(date1 == date2));
00142 }
00143
00144 inline bool operator> (MySQLaux::Date const & date1,
00145 MySQLaux::Date const & date2)
00146 throw (MySQLaux::InvalidDate)
00147 {
00148 return (!(date1 < date2) && !(date1 == date2));
00149 }
00150
00151 inline bool operator>= (MySQLaux::Date const & date1,
00152 MySQLaux::Date const & date2)
00153 throw (MySQLaux::InvalidDate)
00154 {
00155 return (!(date1 < date2));
00156 }
00164 std::ostream & operator<<(std::ostream & os, MySQLaux::Date const & date) throw (MySQLaux::InvalidDate);
00165
00172 std::istringstream & operator>>(std::istringstream & is, MySQLaux::Date & date)
00173 throw (MySQLaux::InvalidDate);
00174
00175 #endif // __MySQLaux_Date_h__
00176
00177
00178
00179
00180
00181
00182
00183
00184