#ifndef __XMLIO_DATE__ #define __XMLIO_DATE__ namespace XMLIOSERVER { class Date { public : Date(const AbstractCalendar& cal, int yr = 0, int mth = 1, int d = 1, int hr = 0, int min = 0 , int sec = 0) : relCalendar(cal) , year(yr), month(mth), day(d), hour(hr), minute(min), second(sec) { if(!checkDate()) WARNING("La date initialisée a été modifiée car elle était incorrecte par rapport au calendrier souhaité."); } Date(const Date& d) : relCalendar(d.getRelCalendar()) , year(d.year), month(d.month), day(d.day), hour(d.hour), minute(d.minute), second(d.second) { if(!checkDate()) WARNING("La date initialisée a été modifiée car elle était incorrecte par rapport au calendrier souhaité."); } Date& operator=(const Date& d) { // relCalendar = d.getRelCalendar(); << inutile si fonction bien utilisée year = d.year; month = d.month; day = d.day; hour = d.hour; minute = d.minute; second = d.second; return (*this); } operator Time(void); // Retourne le nombre de secondes écoulées depuis la date initiale définie dans le calendrier. bool checkDate(void); // Vérifie la validité de la date. friend std::ostream& operator<<(std::ostream& out, const Date& d) { out << d.day << '/' << d.month << '/' << d.year << '-' << d.hour << ':' << d.minute << ':' << d.second; return (out); } friend std::istream& operator>>(std::istream& in, Date& d) // Non testée. { char c = '/'; // Le caractère c est utilisé pour "recueillir" les séparateurs "/" et ":". in >> d.day >> c >> d.month >> c >> d.year >> c; in >> d.hour >> c >> d.minute >> c >> d.second; if(!d.checkDate()) WARNING("La date initialisée (depuis une chaîne de caractères) a été modifiée car elle était incorrecte par rapport au calendrier souhaité."); return (in); } static Date FromString(const string& str, const AbstractCalendar& cal); /// Divers accesseurs. int getYear (void) const { return (year); } int getMonth (void) const { return (month); } int getDay (void) const { return (day); } int getHour (void) const { return (hour); } int getMinute(void) const { return (minute); } int getSecond(void) const { return (second); } void setYear (int newyear) { year = newyear; } void setMonth (int newmonth) { month = newmonth; } void addMonth (int value) {// Value doit être égale à 1 ou -1. month += value; if (month == 13) { year++; month = 1 ; } if (month == 0 ) { year--; month = 12; } } const AbstractCalendar& getRelCalendar(void) const { return (relCalendar); } ~Date() {/* Ne rien faire de plus */} private : const AbstractCalendar& relCalendar; // Calendrier lié à la Date. int year, month, day, hour, minute, second; // Année, mois, ... }; // class Date } // namespace XMLIOSERVER #endif // __XMLIO_DATE__