source: XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp @ 127

Last change on this file since 127 was 127, checked in by hozdoba, 14 years ago

suite du précédent commit

File size: 3.8 KB
Line 
1#ifndef __XMLIO_CALENDAR__
2#define __XMLIO_CALENDAR__
3
4namespace XMLIOSERVER
5{
6   class JulianCalendar : public AbstractCalendar
7   {
8      public :
9
10         JulianCalendar() : AbstractCalendar("Julian")
11         {/* Ne rien faire de plus */}
12         JulianCalendar(const string& _dateStr) : AbstractCalendar("Julian", _dateStr)
13         {/* Ne rien faire de plus */}
14
15      public : /* virtual */
16
17         virtual int getYearTotalLength(const Date& _d) const
18         { // Retourne la durée d'une année en seconde.
19            if (_d.getYear()%4 == 0) return (366 * 86400);
20            return (365 * 86400);
21         }
22
23         virtual int getMonthLength(const Date& _d) const
24         { // Retourne la durée du mois en jour.
25            if (_d.getMonth() == 2)
26            { if (_d.getYear()%4 == 0) return 29; return 28; }
27            return (AbstractCalendar::getMonthLength(_d));
28         }
29
30         virtual ~JulianCalendar()
31         {/* Ne rien faire de plus */}
32
33   }; // class JulianCalendar
34
35   class GregorianCalendar : public AbstractCalendar
36   {
37      public :
38
39         GregorianCalendar() : AbstractCalendar("Gregorian")
40         {/* Ne rien faire de plus */}
41         GregorianCalendar(const string& dateStr) : AbstractCalendar("Gregorian", dateStr)
42         {/* Ne rien faire de plus */}
43
44      public : /* virtual */
45
46         virtual int getYearTotalLength(const Date& d) const
47         { // Retourne la durée d'une année en seconde.
48            if ((d.getYear() % 4 == 0) && (d.getYear() % 100 != 0 || d.getYear() % 400 == 0)) return (366 * 86400);
49            return (365 * 86400);
50         }
51
52         virtual int getMonthLength(const Date& d) const
53         { // Retourne la durée du mois en jour.
54            if (d.getMonth() == 2)
55            { // Traitement du cas particulier en Février.
56               if ((d.getYear() % 4   == 0) &&
57                  ((d.getYear() % 100 != 0) ||
58                   (d.getYear() % 400 == 0) ))
59                  return (29);
60               return (28);
61            }
62            return (AbstractCalendar::getMonthLength(d));
63         }
64
65         virtual ~GregorianCalendar()
66         {/* Ne rien faire de plus */}
67
68   }; // class GregorianCalendar
69
70   class NoLeapCalendar : public AbstractCalendar
71   {
72      public :
73
74         NoLeapCalendar() : AbstractCalendar("NoLeap")
75         {/* Ne rien faire de plus */}
76         NoLeapCalendar(const string& dateStr) : AbstractCalendar("NoLeap", dateStr)
77         {/* Ne rien faire de plus */}
78
79         virtual ~NoLeapCalendar()
80         {/* Ne rien faire de plus */}
81
82   }; // class NoLeapCalendar
83
84   class AllLeapCalendar : public AbstractCalendar
85   {
86      public :
87
88         AllLeapCalendar() : AbstractCalendar("AllLeap")
89         {/* Ne rien faire de plus */}
90         AllLeapCalendar(const string& dateStr) : AbstractCalendar("AllLeap", dateStr)
91         {/* Ne rien faire de plus */}
92
93      public : /* virtual */
94
95         virtual int getMonthLength(const Date& d) const
96         { if (d.getMonth() == 2) return (29); return (AbstractCalendar::getMonthLength(d)); }
97
98         virtual int getYearTotalLength(const Date& d) const { return (366 * 86400); }
99
100         virtual ~AllLeapCalendar()
101         {/* Ne rien faire de plus */}
102
103   }; // class NoLeapCalendar
104
105   class D360Calendar : public AbstractCalendar
106   {
107      public :
108
109         D360Calendar() : AbstractCalendar("D360")
110         {/* Ne rien faire de plus */}
111         D360Calendar(const string& dateStr) : AbstractCalendar("D360", dateStr)
112         {/* Ne rien faire de plus */}
113
114      public : /* virtual */
115
116         virtual int getYearTotalLength(const Date& d) const { return (360 * 86400); }
117         virtual int getMonthLength(const Date& d) const { return (30); }
118
119         virtual ~D360Calendar()
120         {/* Ne rien faire de plus */}
121
122   }; // class D360Calendar
123
124} // namespace XMLIOSERVER
125
126#endif // __XMLIO_CALENDAR__
Note: See TracBrowser for help on using the repository browser.