source: XMLIO_V2/dev/dev_rv/src/xmlio/date.cpp @ 188

Last change on this file since 188 was 188, checked in by hozdoba, 12 years ago
File size: 6.2 KB
Line 
1#include "date.hpp"
2#include "calendar.hpp"
3
4namespace xmlioserver
5{
6   namespace date
7   {
8      /// ////////////////////// Définitions ////////////////////// ///
9      CDate::CDate(const CCalendar& calendar,
10                   int yr, int mth, int d,
11                   int hr, int min, int sec)
12         : relCalendar(calendar)
13         , year(yr), month(mth) , day(d)
14         , hour(hr), minute(min), second(sec)
15      {
16         if(!this->checkDate())
17            DEBUG(<< "La date initialisée a été modifiée "
18                  << "car elle était incorrecte par rapport au calendrier souhaité.");
19      }
20
21      CDate::CDate(const CDate & date)
22            : relCalendar(date.getRelCalendar()),
23              year(date.year), month(date.month)  , day(date.day),
24              hour(date.hour), minute(date.minute), second(date.second)
25      {
26         if(!this->checkDate())
27            DEBUG(<< "La date initialisée a été modifiée "
28                  << "car elle était incorrecte par rapport au calendrier souhaité.");
29      }
30
31      CDate::~CDate(void)
32      { /* Ne rien faire de plus */ }
33
34      ///---------------------------------------------------------------
35
36      CDate & CDate::operator=(const CDate & date)
37      {
38         // relCalendar = d.getRelCalendar(); << inutile si fonction bien utilisée
39         year = date.year; month  = date.month ; day    = date.day;
40         hour = date.hour; minute = date.minute; second = date.second;
41         return (*this);
42      }
43
44      StdOStream & operator<<(StdOStream & out, const CDate & date)
45      {
46         out << date.day  << '/' << date.month  << '/' << date.year   << '-'
47             << date.hour << ':' << date.minute << ':' << date.second;
48         return (out);
49      }
50
51      StdIStream & operator>>(StdIStream & in, CDate & date) // Non testée.
52      {
53         char c = '/'; // Le caractÚre c est utilisé pour "recueillir" les séparateurs "/" et ":".
54         in >> date.day  >> c >> date.month  >> c >> date.year   >> c;
55         in >> date.hour >> c >> date.minute >> c >> date.second;
56         if(!date.checkDate())
57            DEBUG("La date initialisée (depuis une chaîne de caractÚres) "
58                  << "a été modifiée car elle était incorrecte "
59                  << "par rapport au calendrier souhaité.");
60         return (in);
61      }
62
63      CDate::operator Time(void) // Non vérifiée, pas optimisée ...
64      {
65         // Todo : Tester si la date courante est supérieure à la date initiale.
66         Time retvalue = - relCalendar.getNbSecond(relCalendar.getInitDate())
67                         + relCalendar.getNbSecond(*this);
68
69         if ((relCalendar.getId().compare("D360")    == 0) ||
70             (relCalendar.getId().compare("AllLeap") == 0) ||
71             (relCalendar.getId().compare("NoLeap")  == 0))
72         return (retvalue + (getYear() - relCalendar.getInitDate().getYear())
73                                       * relCalendar.getYearTotalLength(*this));
74
75         for(CDate _d(relCalendar.getInitDate());
76            _d.getYear() < getYear(); _d.setYear(_d.getYear()+1))
77            retvalue += relCalendar.getYearTotalLength(_d);
78         return (retvalue);
79      }
80
81      //----------------------------------------------------------------
82
83      bool CDate::checkDate(void)
84      {
85         bool retValue = true;
86
87         // Vérificatio de la valeur du mois.
88         if (month  < 1) { retValue = false; month  = 1; }
89         if (month  > relCalendar.getYearLength())
90         { retValue = false; month = relCalendar.getYearLength(); }
91
92         // Vérification de la valeur du jour.
93         if (day    < 1) { retValue = false; month  = 1; }
94         if (day    > relCalendar.getMonthLength(*this))
95         { retValue = false; day = relCalendar.getMonthLength(*this); }
96
97         // Vérification de la valeur de l'heure.
98         if (hour   < 0) { retValue = false; hour  = 0; }
99         if (hour   >= relCalendar.getDayLength())
100         { retValue = false; hour = relCalendar.getDayLength()-1; }
101
102         // Vérification de la valeur des minutes.
103         if (minute < 0) { retValue = false; minute = 0; }
104         if (minute >= relCalendar.getHourLength())
105         { retValue = false; minute = relCalendar.getHourLength()-1; }
106
107         // Vérification de la valeur des secondes.
108         if (second < 0) { retValue = false; month  = 0; }
109         if (second >= relCalendar.getMinuteLength())
110         { retValue = false; second = relCalendar.getMinuteLength()-1; }
111
112         return retValue;
113      }
114
115      //----------------------------------------------------------------
116
117      int CDate::getYear  (void) const { return (this->year  ); }
118      int CDate::getMonth (void) const { return (this->month ); }
119      int CDate::getDay   (void) const { return (this->day   ); }
120      int CDate::getHour  (void) const { return (this->hour  ); }
121      int CDate::getMinute(void) const { return (this->minute); }
122      int CDate::getSecond(void) const { return (this->second); }
123
124      //----------------------------------------------------------------
125
126      const CCalendar & CDate::getRelCalendar(void) const
127      { return (this->relCalendar); }
128
129      //----------------------------------------------------------------
130
131      void CDate::setYear  (int newyear)  { this->year  = newyear; }
132      void CDate::setMonth (int newmonth) { this->month = newmonth; }
133
134      //----------------------------------------------------------------
135
136      void CDate::addMonth (int value)
137      {// Value doit être égale à 1 ou -1.
138         this->month += value;
139         if (this->month == 13) { year++; this->month = 1 ; }
140         if (this->month == 0 ) { year--; this->month = 12; }
141      }
142
143      //----------------------------------------------------------------
144
145      CDate CDate::FromString(const StdString & str, const CCalendar & calendar)
146      {
147         CDate dt(calendar);
148         StdIStringStream iss(str);
149         iss >> dt;
150         return dt;
151      }
152     
153      //----------------------------------------------------------------
154     
155       StdString CDate::toString(void) const
156      { 
157         StdOStringStream oss;
158         oss << (*this);
159         return (oss.str()); 
160      }
161
162      ///---------------------------------------------------------------
163
164   } // namespace date
165} // namespace xmlioserver
Note: See TracBrowser for help on using the repository browser.