1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     fnd_DateTime.h
4 
5   Copyright (C)2009-2012 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: 47798 $
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 
78 */
79 class DateTime
80 {
81 public:
82     /* Please see man pages for details
83 
84 
85 
86     */
DateTime()87     DateTime() : m_MilliSeconds(0) {}
88 
89     /* Please see man pages for details
90 
91 
92 
93     */
94     DateTime(s32 year, s32 month, s32 day, s32 hour=0, s32 minute=0, s32 second=0, s32 millisecond=0);
95 
96     /* Please see man pages for details
97 
98 
99 
100 
101 
102     */
103     s32  GetYear() const;
104 
105     /* Please see man pages for details
106 
107 
108 
109 
110 
111     */
112     s32 GetMonth() const;
113 
114     /* Please see man pages for details
115 
116 
117 
118 
119 
120     */
121     s32 GetDay() const;
122 
123     /* Please see man pages for details
124 
125 
126 
127 
128 
129     */
130     Week GetWeek() const;
131 
132     /* Please see man pages for details
133 
134 
135 
136 
137 
138     */
139     s32 GetHour() const;
140 
141     /* Please see man pages for details
142 
143 
144 
145 
146 
147     */
148     s32 GetMinute() const;
149 
150     /* Please see man pages for details
151 
152 
153 
154 
155 
156     */
157     s32 GetSecond() const;
158 
159     /* Please see man pages for details
160 
161 
162 
163 
164 
165     */
166     s32 GetMilliSecond() const;
167 
168     /* Please see man pages for details
169 
170 
171 
172     */
173     DateTimeParameters GetParameters() const;
174 
175     /* Please see man pages for details
176 
177 
178     */
179     DateTime ReplaceYear(s32 year) const;
180 
181     /* Please see man pages for details
182 
183 
184     */
185     DateTime ReplaceMonth(s32 month) const;
186 
187     /* Please see man pages for details
188 
189 
190     */
191     DateTime ReplaceDay(s32 day) const;
192 
193     /* Please see man pages for details
194 
195 
196     */
197     DateTime ReplaceHour(s32 hour) const;
198 
199     /* Please see man pages for details
200 
201 
202     */
203     DateTime ReplaceMinute(s32 minute) const;
204 
205     /* Please see man pages for details
206 
207 
208     */
209     DateTime ReplaceSecond(s32 second) const;
210 
211     /* Please see man pages for details
212 
213 
214     */
215     DateTime ReplaceMilliSecond(s32 millisecond) const;
216 
217     /* Please see man pages for details
218 
219     */
220     friend bool operator==(const DateTime& lhs, const DateTime& rhs) { return lhs.m_MilliSeconds == rhs.m_MilliSeconds; }
221 
222     /* Please see man pages for details
223 
224     */
225     friend bool operator!=(const DateTime& lhs, const DateTime& rhs) { return !(lhs == rhs); }
226 
227     /* Please see man pages for details
228 
229     */
230     friend bool operator< (const DateTime& lhs, const DateTime& rhs) { return lhs.m_MilliSeconds <  rhs.m_MilliSeconds; }
231 
232     /* Please see man pages for details
233 
234     */
235     friend bool operator> (const DateTime& lhs, const DateTime& rhs) { return rhs < lhs; }
236 
237     /* Please see man pages for details
238 
239     */
240     friend bool operator<=(const DateTime& lhs, const DateTime& rhs) { return !(lhs > rhs); }
241 
242     /* Please see man pages for details
243 
244     */
245     friend bool operator>=(const DateTime& lhs, const DateTime& rhs) { return !(lhs < rhs); }
246 
247     /* Please see man pages for details
248 
249     */
250     DateTime& operator+=(const TimeSpan& rhs) { this->m_MilliSeconds += rhs.GetMilliSeconds(); return *this; }
251 
252     /* Please see man pages for details
253 
254     */
255     friend DateTime operator+(const DateTime& lhs, const TimeSpan& rhs) { DateTime ret(lhs); return ret += rhs; }
256 
257     /* Please see man pages for details
258 
259     */
260     DateTime& operator-=(const TimeSpan& rhs) { this->m_MilliSeconds -= rhs.GetMilliSeconds(); return *this; }
261 
262     /* Please see man pages for details
263 
264     */
265     friend DateTime operator-(const DateTime& lhs, const TimeSpan& rhs) { DateTime ret(lhs); return ret -= rhs; }
266 
267     /* Please see man pages for details
268 
269 
270 
271 
272 
273 
274     */
275     friend TimeSpan operator-(const DateTime& lhs, const DateTime& rhs) { return TimeSpan::FromMilliSeconds(lhs.m_MilliSeconds - rhs.m_MilliSeconds); }
276 
277     /* Please see man pages for details
278 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
289 
290 
291 
292 
293 
294 
295     */
296     static DateTime FromParameters(s32 year, s32 month, s32 day, s32 hour=0, s32 minute=0, s32 second=0, s32 millisecond=0);
297 
298     /* Please see man pages for details
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310 
311 
312     */
313     static DateTime FromParameters(const DateTimeParameters &dateTimeParameters);
314 
315     /* Please see man pages for details
316 
317 
318 
319 
320 
321 
322 
323     */
324     static bool IsValidDate(s32 year, s32 month, s32 day);
325 
326     /* Please see man pages for details
327 
328 
329 
330 
331 
332 
333 
334 
335 
336 
337 
338 
339 
340     */
341     static bool IsValidParameters(s32 year, s32 month, s32 day, s32 hour=0, s32 minute=0, s32 second=0, s32 millisecond=0);
342 
343     /* Please see man pages for details
344 
345 
346 
347 
348 
349 
350 
351     */
352     static bool IsValidParameters(const DateTimeParameters &dateTimeParameters);
353 
354     /* Please see man pages for details
355 
356 
357 
358 
359 
360     */
361     static s32  IsLeapYear(s32 year);
362 
363     /* Please see man pages for details
364 
365 
366 
367 
368 
369 
370 
371 
372 
373 
374 
375     */
376     static s32  DateToDays(s32 year, s32 month, s32 day);
377 
378     /* Please see man pages for details
379 
380 
381 
382 
383 
384 
385     */
386     static void DaysToDate(s32 *pYear, s32 *pMonth, s32 *pDay, s32 days);
387 
388     /* Please see man pages for details
389 
390 
391 
392 
393 
394     */
395     static Week DaysToWeekday(s32 days);
396 
397     /* Please see man pages for details
398 
399 
400 
401 
402 
403 
404 
405 
406 
407 
408 
409 
410 
411 
412 
413 
414     */
415     static DateTime GetNow();
416 
417     /* Please see man pages for details
418 
419     */
420     static const DateTime MIN_DATETIME;
421 
422     /* Please see man pages for details
423 
424     */
425     static const DateTime MAX_DATETIME;
426 
427 private:
428     s64 m_MilliSeconds;
429 
DateTime(s64 milliseconds)430     DateTime(s64 milliseconds) : m_MilliSeconds(milliseconds) { NN_ASSERT(MIN_MILLISECONDS <= milliseconds && milliseconds <= MAX_MILLISECONDS); }
431 
432     static const s64 MIN_MILLISECONDS = -3155673600000LL;
433     static const s64 MAX_MILLISECONDS = 5995900800000LL - 1;
434 };
435 
436 } // namespace fnd {
437 } // namespace nn {
438 
439 #endif // #ifdef __cplusplus
440 
441 #endif //   #ifndef NN_FND_DATETIME_API_H_
442