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

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

Mise à jour intermédiaire ...
A venir : commit d'une version stable intégrant l'écriture de fichiers NetCDF4.
(en cours de finalisation actuellement)

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