1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     fnd_DateTime.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law. They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 28097 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_FND_DATETIME_API_H_
17 #define NN_FND_DATETIME_API_H_
18 
19 /* Please see man pages for details
20 
21 
22 */
23 
24 #include <nn/types.h>
25 #include <nn/assert.h>
26 #include <nn/fnd/fnd_TimeSpan.h>
27 
28 #ifdef __cplusplus
29 
30 namespace nn {
31 namespace fnd {
32 
33 /* Please see man pages for details
34 
35 */
36 enum Week
37 {
38     WEEK_SUNDAY = 0,   //
39     WEEK_MONDAY,       //
40     WEEK_TUESDAY,      //
41     WEEK_WEDNESDAY,    //
42     WEEK_THURSDAY,     //
43     WEEK_FRIDAY,       //
44     WEEK_SATURDAY,     //
45     WEEK_MAX
46 };
47 
48 /* Please see man pages for details
49 
50 */
51 struct DateTimeParameters
52 {
53     s32     year;         //
54     s8      month;        //
55     s8      day;          //
56     Week    week;         //
57     s8      hour;         //
58     s8      minute;       //
59     s8      second;       //
60     s16     milliSecond;  //
61 };
62 
63 /* Please see man pages for details
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 */
77 class DateTime
78 {
79 public:
80     /* Please see man pages for details
81 
82 
83 
84     */
DateTime()85     DateTime() : m_MilliSeconds(0) {}
86 
87     /* Please see man pages for details
88 
89 
90 
91     */
92     DateTime(s32 year, s32 month, s32 day, s32 hour=0, s32 minute=0, s32 second=0, s32 millisecond=0);
93 
94     /* Please see man pages for details
95 
96 
97 
98 
99 
100     */
101     s32  GetYear() const;
102 
103     /* Please see man pages for details
104 
105 
106 
107 
108 
109     */
110     s32 GetMonth() const;
111 
112     /* Please see man pages for details
113 
114 
115 
116 
117 
118     */
119     s32 GetDay() const;
120 
121     /* Please see man pages for details
122 
123 
124 
125 
126 
127     */
128     Week GetWeek() const;
129 
130     /* Please see man pages for details
131 
132 
133 
134 
135 
136     */
137     s32 GetHour() const;
138 
139     /* Please see man pages for details
140 
141 
142 
143 
144 
145     */
146     s32 GetMinute() const;
147 
148     /* Please see man pages for details
149 
150 
151 
152 
153 
154     */
155     s32 GetSecond() const;
156 
157     /* Please see man pages for details
158 
159 
160 
161 
162 
163     */
164     s32 GetMilliSecond() const;
165 
166     /* Please see man pages for details
167 
168 
169 
170     */
171     DateTimeParameters GetParameters() const;
172 
173     /* Please see man pages for details
174 
175 
176     */
177     DateTime ReplaceYear(s32 year) const;
178 
179     /* Please see man pages for details
180 
181 
182     */
183     DateTime ReplaceMonth(s32 month) const;
184 
185     /* Please see man pages for details
186 
187 
188     */
189     DateTime ReplaceDay(s32 day) const;
190 
191     /* Please see man pages for details
192 
193 
194     */
195     DateTime ReplaceHour(s32 hour) const;
196 
197     /* Please see man pages for details
198 
199 
200     */
201     DateTime ReplaceMinute(s32 minute) const;
202 
203     /* Please see man pages for details
204 
205 
206     */
207     DateTime ReplaceSecond(s32 second) const;
208 
209     /* Please see man pages for details
210 
211 
212     */
213     DateTime ReplaceMilliSecond(s32 millisecond) const;
214 
215     /* Please see man pages for details
216 
217     */
218     friend bool operator==(const DateTime& lhs, const DateTime& rhs) { return lhs.m_MilliSeconds == rhs.m_MilliSeconds; }
219 
220     /* Please see man pages for details
221 
222     */
223     friend bool operator!=(const DateTime& lhs, const DateTime& rhs) { return !(lhs == rhs); }
224 
225     /* Please see man pages for details
226 
227     */
228     friend bool operator< (const DateTime& lhs, const DateTime& rhs) { return lhs.m_MilliSeconds <  rhs.m_MilliSeconds; }
229 
230     /* Please see man pages for details
231 
232     */
233     friend bool operator> (const DateTime& lhs, const DateTime& rhs) { return rhs < lhs; }
234 
235     /* Please see man pages for details
236 
237     */
238     friend bool operator<=(const DateTime& lhs, const DateTime& rhs) { return !(lhs > rhs); }
239 
240     /* Please see man pages for details
241 
242     */
243     friend bool operator>=(const DateTime& lhs, const DateTime& rhs) { return !(lhs < rhs); }
244 
245     /* Please see man pages for details
246 
247     */
248     DateTime& operator+=(const TimeSpan& rhs) { this->m_MilliSeconds += rhs.GetMilliSeconds(); return *this; }
249 
250     /* Please see man pages for details
251 
252     */
253     friend DateTime operator+(const DateTime& lhs, const TimeSpan& rhs) { DateTime ret(lhs); return ret += rhs; }
254 
255     /* Please see man pages for details
256 
257     */
258     DateTime& operator-=(const TimeSpan& rhs) { this->m_MilliSeconds -= rhs.GetMilliSeconds(); return *this; }
259 
260     /* Please see man pages for details
261 
262     */
263     friend DateTime operator-(const DateTime& lhs, const TimeSpan& rhs) { DateTime ret(lhs); return ret -= rhs; }
264 
265     /* Please see man pages for details
266 
267 
268 
269 
270 
271 
272     */
273     friend TimeSpan operator-(const DateTime& lhs, const DateTime& rhs) { return TimeSpan::FromMilliSeconds(lhs.m_MilliSeconds - rhs.m_MilliSeconds); }
274 
275     /* Please see man pages for details
276 
277 
278 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
289 
290 
291 
292 
293     */
294     static DateTime FromParameters(s32 year, s32 month, s32 day, s32 hour=0, s32 minute=0, s32 second=0, s32 millisecond=0);
295 
296     /* Please see man pages for details
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310     */
311     static DateTime FromParameters(const DateTimeParameters &dateTimeParameters);
312 
313     /* Please see man pages for details
314 
315 
316 
317 
318 
319 
320 
321     */
322     static bool IsValidDate(s32 year, s32 month, s32 day);
323 
324     /* Please see man pages for details
325 
326 
327 
328 
329 
330 
331 
332 
333 
334 
335 
336 
337 
338     */
339     static bool IsValidParameters(s32 year, s32 month, s32 day, s32 hour=0, s32 minute=0, s32 second=0, s32 millisecond=0);
340 
341     /* Please see man pages for details
342 
343 
344 
345 
346 
347 
348 
349     */
350     static bool IsValidParameters(const DateTimeParameters &dateTimeParameters);
351 
352     /* Please see man pages for details
353 
354 
355 
356 
357 
358     */
359     static s32  IsLeapYear(s32 year);
360 
361     /* Please see man pages for details
362 
363 
364 
365 
366 
367 
368 
369 
370 
371 
372 
373     */
374     static s32  DateToDays(s32 year, s32 month, s32 day);
375 
376     /* Please see man pages for details
377 
378 
379 
380 
381 
382 
383     */
384     static void DaysToDate(s32 *pYear, s32 *pMonth, s32 *pDay, s32 days);
385 
386     /* Please see man pages for details
387 
388 
389 
390 
391 
392     */
393     static Week DaysToWeekday(s32 days);
394 
395     /* Please see man pages for details
396 
397 
398 
399     */
400     static DateTime GetNow();
401 
402     /* Please see man pages for details
403 
404     */
405     static const DateTime MIN_DATETIME;
406 
407     /* Please see man pages for details
408 
409     */
410     static const DateTime MAX_DATETIME;
411 
412 private:
413     s64 m_MilliSeconds;
414 
DateTime(s64 milliseconds)415     DateTime(s64 milliseconds) : m_MilliSeconds(milliseconds) { NN_ASSERT(MIN_MILLISECONDS <= milliseconds && milliseconds <= MAX_MILLISECONDS); }
416 
417     static const s64 MIN_MILLISECONDS = -3155673600000LL;
418     static const s64 MAX_MILLISECONDS = 5995900800000LL - 1;
419 };
420 
421 } // namespace fnd {
422 } // namespace nn {
423 
424 #endif // #ifdef __cplusplus
425 
426 #endif //   #ifndef NN_FND_DATETIME_API_H_
427