studies/bauelemente/Softwarebauelemente-CodeO3-1/Date.cpp
⇒
download file
1
2
3
4
5
6
7
8 #include "Date.h"
9
10
11
12 #include <time.h>
13 #include <iomanip>
14 #include <iostream>
15 using namespace std;
16
17
18
19
20
21 CDate::CDate()
22 {
23 GetToday(m_nDay, m_nMonth, m_nYear, m_nHour, m_nMinute, m_nSecond);
24 }
25
26
27
28 CDate::CDate(const CDate &date)
29 {
30 operator=(date);
31 }
32
33
34
35 CDate::CDate(unsigned int nDay, unsigned int nMonth, unsigned int nYear,
36 unsigned int nHour, unsigned int nMinute, unsigned int nSecond)
37 {
38
39 m_nDay = nDay;
40 m_nMonth = nMonth;
41 m_nYear = nYear;
42
43
44 m_nHour = nHour;
45 m_nMinute = nMinute;
46 m_nSecond = nSecond;
47 }
48
49
50
51 string CDate::Show() const
52 {
53 ostringstream strOutput;
54
55 strOutput << setw(2) << setfill('0') << m_nDay << "."
56 << setw(2) << setfill('0') << m_nMonth << "."
57 << m_nYear << " - "
58 << setw(2) << setfill('0') << m_nHour<< ":"
59 << setw(2) << setfill('0') << m_nMinute << ":"
60 << setw(2) << setfill('0') << m_nSecond;
61
62 return strOutput.str();
63 }
64
65
66
67 string CDate::ShowDebug() const
68 {
69 ostringstream strOutput;
70
71 strOutput << "DEBUG info for 'CDate'" << endl
72 << " m_nDay = " << m_nDay << endl
73 << " m_nMonth = " << m_nMonth << endl
74 << " m_nYear = " << m_nYear << endl
75 << " m_nHour = " << m_nHour << endl
76 << " m_nMinute = " << m_nMinute << endl
77 << " m_nSecond = " << m_nSecond << endl;
78
79 return strOutput.str();
80 }
81
82
83
84 void CDate::GetToday(unsigned int &nDay, unsigned int &nMonth, unsigned int &nYear,
85 unsigned int &nHour, unsigned int &nMinute, unsigned int &nSecond)
86 {
87
88
89
90
91 time_t secondsSince1970;
92 time(&secondsSince1970);
93
94
95 struct tm *localTime;
96 localTime = localtime(&secondsSince1970);
97
98
99 nDay = localTime->tm_mday;
100 nMonth = localTime->tm_mon + 1;
101 nYear = localTime->tm_year + 1900;
102
103 nHour = localTime->tm_hour;
104 nMinute = localTime->tm_min;
105 nSecond = localTime->tm_sec;
106 }
107
108
109
110 bool CDate::ClassInvariant() const
111 {
112
113 if (m_nMonth < JANUARY || m_nMonth > DECEMBER)
114 return false;
115
116
117 unsigned int nDaysPerMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
118
119
120 if (IsLeapYear(m_nYear))
121 nDaysPerMonth[FEBRUARY]++;
122
123
124 if (m_nDay < 1 || m_nDay > nDaysPerMonth[m_nMonth])
125 return false;
126
127
128
129 if (m_nHour < 0 || m_nHour > 23)
130 return false;
131 if (m_nMinute < 0 || m_nMinute > 59)
132 return false;
133 if (m_nSecond < 0 || m_nSecond > 59)
134 return false;
135
136
137 return true;
138 }
139
140
141
142 bool CDate::IsLeapYear(unsigned int nYear)
143 {
144
145 if (nYear % 4 != 0)
146 return false;
147
148
149 if (nYear % 400 == 0)
150 return true;
151 if (nYear % 100 == 0)
152 return false;
153 if (nYear % 4 == 0)
154 return true;
155
156
157 return false;
158 }
159
160
161
162 CDate& CDate::operator =(const CDate &date)
163 {
164
165 m_nDay = date.m_nDay;
166 m_nMonth = date.m_nMonth;
167 m_nYear = date.m_nYear;
168
169 m_nHour = date.m_nHour;
170 m_nMinute = date.m_nMinute;
171 m_nSecond = date.m_nSecond;
172
173 return *this;
174 }
175
176
177
178 bool CDate::Copy(const CBasicClass *pClass)
179 {
180
181 CBasicClass *basic;
182 CDate *date;
183 basic = const_cast<CBasicClass*>(pClass);
184 date = dynamic_cast<CDate*>(basic);
185
186
187 if (date == NULL || date == this)
188 return false;
189
190
191
192 operator=(*date);
193
194
195 return true;
196 }
197
198
199
200 bool CDate::operator ==(const CDate &date) const
201 {
202
203 return (m_nDay == date.m_nDay &&
204 m_nMonth == date.m_nMonth &&
205 m_nYear == date.m_nYear &&
206 m_nHour == date.m_nHour &&
207 m_nMinute == date.m_nMinute &&
208 m_nSecond == date.m_nSecond);
209 }
210
211
212
213 bool CDate::EqualValue(const CBasicClass *pClass) const
214 {
215
216 CBasicClass *basic;
217 CDate *date;
218 basic = const_cast<CBasicClass*>(pClass);
219 date = dynamic_cast<CDate*>(basic);
220
221
222 if (date == NULL)
223 return false;
224
225
226 return operator==(*date);
227 }
228
229
230
231 void CDate::SetDay(unsigned int nDay)
232 {
233 m_nDay = nDay;
234 }
235 void CDate::SetMonth(unsigned int nMonth)
236 {
237 m_nMonth = nMonth;
238 }
239 void CDate::SetYear(unsigned int nYear)
240 {
241 m_nYear = nYear;
242 }
243 void CDate::SetHour(unsigned int nHour)
244 {
245 m_nHour = nHour;
246 }
247 void CDate::SetMinute(unsigned int nMinute)
248 {
249 m_nMinute = nMinute;
250 }
251 void CDate::SetSecond(unsigned int nSecond)
252 {
253 m_nSecond = nSecond;
254 }
255
256
257 unsigned int CDate::GetDay() const
258 {
259 return m_nDay;
260 }
261 unsigned int CDate::GetMonth() const
262 {
263 return m_nMonth;
264 }
265 unsigned int CDate::GetYear() const
266 {
267 return m_nYear;
268 }
269 unsigned int CDate::GetHour() const
270 {
271 return m_nHour;
272 }
273 unsigned int CDate::GetMinute() const
274 {
275 return m_nMinute;
276 }
277 unsigned int CDate::GetSecond() const
278 {
279 return m_nSecond;
280 }
281