Salome HOME
Porting to Mandrake 10.1 and new products:
[modules/kernel.git] / src / Batch / Batch_Date.cxx
1 /*
2  * Date.cxx : 
3  *
4  * Auteur : Ivan DUTKA-MALEN - EDF R&D
5  * Mail   : mailto:ivan.dutka-malen@der.edf.fr
6  * Date   : Wed Nov 26 14:11:42 2003
7  * Projet : Salome 2
8  *
9  */
10
11 #include <cstdio>
12 #include <ctime>
13 #include "Batch_Date.hxx"
14 using namespace std;
15
16 namespace Batch {
17
18   Date::Date(const long l)
19   {
20     time_t l_t = l;
21     struct tm * p_tm = localtime(&l_t);
22     _day   = p_tm->tm_mday;
23     _month = p_tm->tm_mon  + 1;
24     _year  = p_tm->tm_year + 1900;
25     _hour  = p_tm->tm_hour;
26     _min   = p_tm->tm_min;
27     _sec   = p_tm->tm_sec;
28   }
29
30   Date::Date(const string s)
31   { 
32     if ((s == "now") || (s == "Now") || (s == "NOW")) {
33       long l = time(0);
34       time_t l_t = l;
35       struct tm * p_tm = localtime(&l_t);
36       _day   = p_tm->tm_mday;
37       _month = p_tm->tm_mon  + 1;
38       _year  = p_tm->tm_year + 1900;
39       _hour  = p_tm->tm_hour;
40       _min   = p_tm->tm_min;
41       _sec   = p_tm->tm_sec;
42
43     } else {
44       char c;
45 //       istringstream ist(s);
46 //       ist >> _day   >> c
47 //        >> _month >> c
48 //        >> _year  >> c
49 //        >> _hour  >> c
50 //        >> _min   >> c
51 //        >> _sec;
52       sscanf(s.c_str(), "%ld/%ld/%ld-%ld:%ld:%ld", &_day, &_month, &_year, &_hour, &_min, &_sec);
53     }
54   }
55
56   Date & Date::operator =(long l)
57   {
58     time_t l_t = l;
59     struct tm * p_tm = localtime(&l_t);
60     _day   = p_tm->tm_mday;
61     _month = p_tm->tm_mon  + 1;
62     _year  = p_tm->tm_year + 1900;
63     _hour  = p_tm->tm_hour;
64     _min   = p_tm->tm_min;
65     _sec   = p_tm->tm_sec;
66
67     return *this;
68   }
69
70   Date & Date::operator +(long l)
71   {
72     *this = epoch() + l;
73     return *this;
74   }
75
76   Date & Date::operator -(long l)
77   {
78     *this = epoch() - l;
79     return *this;
80   }
81
82   Date & Date::operator +=(long l)
83   {
84     *this = epoch() + l;
85     return *this;
86   }
87
88   Date & Date::operator -=(long l)
89   {
90     *this = epoch() - l;
91     return *this;
92   }
93
94   Date & Date::operator =(const string & s)
95   {
96     if ((s == "now") || (s == "Now") || (s == "NOW")) {
97       long l = time(0);
98       time_t l_t = l;
99       struct tm * p_tm = localtime(&l_t);
100       _day   = p_tm->tm_mday;
101       _month = p_tm->tm_mon  + 1;
102       _year  = p_tm->tm_year + 1900;
103       _hour  = p_tm->tm_hour;
104       _min   = p_tm->tm_min;
105       _sec   = p_tm->tm_sec;
106
107     } else {
108       char c;
109 //       istringstream ist(s);
110 //       ist >> _day   >> c
111 //        >> _month >> c
112 //        >> _year  >> c
113 //        >> _hour  >> c
114 //        >> _min   >> c
115 //        >> _sec;
116       sscanf(s.c_str(), "%ld/%ld/%ld-%ld:%ld:%ld", &_day, &_month, &_year, &_hour, &_min, &_sec);
117     }
118  
119     return *this;
120   }
121
122   string Date::str() const
123   {
124     char buf[64];
125     string datestr;
126
127     // _day to char * 
128     sprintf(buf, "%02ld", _day);
129     datestr += buf;
130     datestr += "/";
131
132     // _month to char * 
133     sprintf(buf, "%02ld", _month);
134     datestr += buf;
135     datestr += "/";
136
137     // _year to char * 
138     sprintf(buf, "%04ld", _year);
139     datestr += buf;
140     datestr += "-";
141
142     // _hour to char * 
143     sprintf(buf, "%02ld", _hour);
144     datestr += buf;
145     datestr += ":";
146
147     // _min to char * 
148     sprintf(buf, "%02ld", _min);
149     datestr += buf;
150     datestr += ":";
151
152     // _sec to char * 
153     sprintf(buf, "%02ld", _sec);
154     datestr += buf;
155
156     return datestr;
157   }
158
159   long Date::epoch() const
160   {
161     struct tm T;
162     T.tm_mday = _day;
163     T.tm_mon  = _month - 1;
164     T.tm_year = _year  - 1900;
165     T.tm_hour = _hour;
166     T.tm_min  = _min;
167     T.tm_sec  = _sec;
168     return mktime(&T);
169   }
170
171 }
172
173
174 // COMMENTS