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

Last change on this file since 138 was 138, checked in by hozdoba, 13 years ago

Mise à jour

File size: 5.3 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(const string& _dateStr)
11            : AbstractCalendar("Julian", _dateStr)
12         { /* Ne rien faire de plus */ }
13
14         JulianCalendar(int yr = 0, int mth = 1, int d   = 1,
15                        int hr = 0, int min = 0, int sec = 0)
16             : AbstractCalendar("Julian", yr, mth, d, hr, min, sec)
17         { /* Ne rien faire de plus */ }
18
19      public : /* virtual */
20
21         virtual int getYearTotalLength(const Date& _d) const
22         { // Retourne la durée d'une année en seconde.
23            if (_d.getYear()%4 == 0)
24               return (366 * 86400);
25            return (365 * 86400);
26         }
27
28         virtual int getMonthLength(const Date& _d) const
29         { // Retourne la durée du mois en jour.
30            if (_d.getMonth() == 2)
31            {
32               if (_d.getYear()%4 == 0)
33                  return 29;
34               return 28;
35            }
36            return (AbstractCalendar::getMonthLength(_d));
37         }
38
39         virtual string getType(void) const
40         { return (string("julian")); }
41
42         virtual ~JulianCalendar(void)
43         { /* Ne rien faire de plus */ }
44
45   }; // class JulianCalendar
46
47   class GregorianCalendar : public AbstractCalendar
48   {
49      public :
50
51         GregorianCalendar(int yr = 0, int mth = 1, int d   = 1,
52                           int hr = 0, int min = 0, int sec = 0)
53             : AbstractCalendar("Gregorian", yr, mth, d, hr, min, sec)
54         { /* Ne rien faire de plus */ }
55
56         GregorianCalendar(const string& dateStr)
57            : AbstractCalendar("Gregorian", dateStr)
58         { /* Ne rien faire de plus */ }
59
60      public : /* virtual */
61
62         virtual int getYearTotalLength(const Date& d) const
63         { // Retourne la durée d'une année en seconde.
64            if ((d.getYear() % 4   == 0) &&
65               ((d.getYear() % 100 != 0)  ||
66                (d.getYear() % 400 == 0)  ))
67               return (366 * 86400);
68            return (365 * 86400);
69         }
70
71         virtual int getMonthLength(const Date& d) const
72         { // Retourne la durée du mois en jour.
73            if (d.getMonth() == 2)
74            { // Traitement du cas particulier en Février.
75               if ((d.getYear() % 4   == 0) &&
76                  ((d.getYear() % 100 != 0) ||
77                   (d.getYear() % 400 == 0) ))
78                  return (29);
79               return (28);
80            }
81            return (AbstractCalendar::getMonthLength(d));
82         }
83
84         virtual string getType(void) const
85         { return (string("gregorian")); }
86
87         virtual ~GregorianCalendar(void)
88         { /* Ne rien faire de plus */ }
89
90   }; // class GregorianCalendar
91
92   class NoLeapCalendar : public AbstractCalendar
93   {
94      public :
95
96         NoLeapCalendar(int yr = 0, int mth = 1, int d   = 1,
97                        int hr = 0, int min = 0, int sec = 0)
98             : AbstractCalendar("NoLeap", yr, mth, d, hr, min, sec)
99         { /* Ne rien faire de plus */ }
100
101         NoLeapCalendar(const string& dateStr)
102            : AbstractCalendar("NoLeap", dateStr)
103         { /* Ne rien faire de plus */ }
104
105      public : /* virtual */
106
107         virtual string getType(void) const
108         { return (string("noleap")); }
109
110         virtual ~NoLeapCalendar(void)
111         { /* Ne rien faire de plus */ }
112
113   }; // class NoLeapCalendar
114
115   class AllLeapCalendar : public AbstractCalendar
116   {
117      public :
118
119         AllLeapCalendar(int yr = 0, int mth = 1, int d   = 1,
120                         int hr = 0, int min = 0, int sec = 0)
121             : AbstractCalendar("AllLeap", yr, mth, d, hr, min, sec)
122         { /* Ne rien faire de plus */ }
123
124         AllLeapCalendar(const string& dateStr)
125            : AbstractCalendar("AllLeap", dateStr)
126         { /* Ne rien faire de plus */ }
127
128      public : /* virtual */
129
130         virtual int getMonthLength(const Date& d) const
131         {
132            if (d.getMonth() == 2)
133               return (29);
134            return (AbstractCalendar::getMonthLength(d));
135         }
136
137         virtual int getYearTotalLength(const Date& d) const
138         { return (366 * 86400); }
139
140         virtual string getType(void) const
141         { return (string("allleap")); }
142
143         virtual ~AllLeapCalendar(void)
144         { /* Ne rien faire de plus */ }
145
146   }; // class NoLeapCalendar
147
148   class D360Calendar : public AbstractCalendar
149   {
150      public :
151
152         D360Calendar(int yr = 0, int mth = 1, int d   = 1,
153                      int hr = 0, int min = 0, int sec = 0)
154             : AbstractCalendar("D360", yr, mth, d, hr, min, sec)
155         { /* Ne rien faire de plus */ }
156
157         D360Calendar(const string& dateStr)
158            : AbstractCalendar("D360", dateStr)
159         { /* Ne rien faire de plus */ }
160
161      public : /* virtual */
162
163         virtual int getYearTotalLength(const Date& d) const
164         { return (360 * 86400); }
165
166         virtual int getMonthLength(const Date& d) const
167         { return (30); }
168
169         virtual string getType(void) const
170         { return (string("360d")); }
171
172         virtual ~D360Calendar(void)
173         { /* Ne rien faire de plus */ }
174
175   }; // class D360Calendar
176
177} // namespace XMLIOSERVER
178
179#endif // __XMLIO_CALENDAR__
Note: See TracBrowser for help on using the repository browser.