#ifndef __XMLIO_CALENDAR__ #define __XMLIO_CALENDAR__ namespace XMLIOSERVER { class JulianCalendar : public AbstractCalendar { public : JulianCalendar() : AbstractCalendar("Julian") {/* Ne rien faire de plus */} JulianCalendar(const string& _dateStr) : AbstractCalendar("Julian", _dateStr) {/* Ne rien faire de plus */} public : /* virtual */ virtual int getYearTotalLength(const Date& _d) const { // Retourne la durée d'une année en seconde. if (_d.getYear()%4 == 0) return (366 * 86400); return (365 * 86400); } virtual int getMonthLength(const Date& _d) const { // Retourne la durée du mois en jour. if (_d.getMonth() == 2) { if (_d.getYear()%4 == 0) return 29; return 28; } return (AbstractCalendar::getMonthLength(_d)); } virtual ~JulianCalendar() {/* Ne rien faire de plus */} }; // class JulianCalendar class GregorianCalendar : public AbstractCalendar { public : GregorianCalendar() : AbstractCalendar("Gregorian") {/* Ne rien faire de plus */} GregorianCalendar(const string& dateStr) : AbstractCalendar("Gregorian", dateStr) {/* Ne rien faire de plus */} public : /* virtual */ virtual int getYearTotalLength(const Date& d) const { // Retourne la durée d'une année en seconde. if ((d.getYear() % 4 == 0) && (d.getYear() % 100 != 0 || d.getYear() % 400 == 0)) return (366 * 86400); return (365 * 86400); } virtual int getMonthLength(const Date& d) const { // Retourne la durée du mois en jour. if (d.getMonth() == 2) { // Traitement du cas particulier en Février. if ((d.getYear() % 4 == 0) && ((d.getYear() % 100 != 0) || (d.getYear() % 400 == 0) )) return (29); return (28); } return (AbstractCalendar::getMonthLength(d)); } virtual ~GregorianCalendar() {/* Ne rien faire de plus */} }; // class GregorianCalendar class NoLeapCalendar : public AbstractCalendar { public : NoLeapCalendar() : AbstractCalendar("NoLeap") {/* Ne rien faire de plus */} NoLeapCalendar(const string& dateStr) : AbstractCalendar("NoLeap", dateStr) {/* Ne rien faire de plus */} virtual ~NoLeapCalendar() {/* Ne rien faire de plus */} }; // class NoLeapCalendar class AllLeapCalendar : public AbstractCalendar { public : AllLeapCalendar() : AbstractCalendar("AllLeap") {/* Ne rien faire de plus */} AllLeapCalendar(const string& dateStr) : AbstractCalendar("AllLeap", dateStr) {/* Ne rien faire de plus */} public : /* virtual */ virtual int getMonthLength(const Date& d) const { if (d.getMonth() == 2) return (29); return (AbstractCalendar::getMonthLength(d)); } virtual int getYearTotalLength(const Date& d) const { return (366 * 86400); } virtual ~AllLeapCalendar() {/* Ne rien faire de plus */} }; // class NoLeapCalendar class D360Calendar : public AbstractCalendar { public : D360Calendar() : AbstractCalendar("D360") {/* Ne rien faire de plus */} D360Calendar(const string& dateStr) : AbstractCalendar("D360", dateStr) {/* Ne rien faire de plus */} public : /* virtual */ virtual int getYearTotalLength(const Date& d) const { return (360 * 86400); } virtual int getMonthLength(const Date& d) const { return (30); } virtual ~D360Calendar() {/* Ne rien faire de plus */} }; // class D360Calendar } // namespace XMLIOSERVER #endif // __XMLIO_CALENDAR__