1#pragma once
2
3#include "basis/seadTypes.h"
4#include "time/seadCalendarTime.h"
5#include "time/seadDateSpan.h"
6
7namespace sead
8{
9class DateTimeUtc;
10
11class DateTime
12{
13public:
14 DateTime(u64 unix_time);
15 DateTime(const CalendarTime& time);
16 DateTime(const CalendarTime::Year& year, const CalendarTime::Month& month,
17 const CalendarTime::Day& day, const CalendarTime::Hour& hour,
18 const CalendarTime::Minute& minute, const CalendarTime::Second& second);
19
20 DateTime& operator+=(DateSpan span)
21 {
22 mUnixTime += span.getSpan();
23 return *this;
24 }
25
26 DateTime& operator-=(DateSpan span)
27 {
28 mUnixTime -= span.getSpan();
29 return *this;
30 }
31
32 u64 setNow();
33 void setUnixTime(u64 unix_time) { mUnixTime = unix_time; }
34 u64 setUnixTime(const CalendarTime& time);
35 u64 setUnixTime(const CalendarTime::Year& year, const CalendarTime::Month& month,
36 const CalendarTime::Day& day, const CalendarTime::Hour& hour,
37 const CalendarTime::Minute& minute, const CalendarTime::Second& second);
38
39 u64 getUnixTime() const { return mUnixTime; }
40 void getCalendarTime(CalendarTime* time) const;
41
42 DateSpan diff(DateTime time) const;
43 DateSpan diffToNow() const;
44
45 static void initializeSystemTimeModule();
46
47protected:
48 static bool mIsInitialized;
49 u64 mUnixTime;
50};
51
52DateSpan operator-(DateTime lhs, DateTime rhs);
53DateTime operator-(DateTime time, DateSpan span);
54DateTime operator+(DateTime time, DateSpan span);
55
56class DateTimeUtc
57{
58public:
59 DateTimeUtc(u64 unix_time);
60 DateTimeUtc(const DateTime& time);
61 DateTimeUtc(const CalendarTime& time);
62 DateTimeUtc(const CalendarTime::Year& year, const CalendarTime::Month& month,
63 const CalendarTime::Day& day, const CalendarTime::Hour& hour,
64 const CalendarTime::Minute& minute, const CalendarTime::Second& second);
65
66 DateTimeUtc& operator+=(DateSpan span)
67 {
68 mUnixTime += span.getSpan();
69 return *this;
70 }
71
72 DateTimeUtc& operator-=(DateSpan span)
73 {
74 mUnixTime -= span.getSpan();
75 return *this;
76 }
77
78 u64 setNow();
79 void setUnixTime(u64 unix_time) { mUnixTime = unix_time; }
80 u64 setUnixTime(const CalendarTime& time);
81 u64 setUnixTime(const CalendarTime::Year& year, const CalendarTime::Month& month,
82 const CalendarTime::Day& day, const CalendarTime::Hour& hour,
83 const CalendarTime::Minute& minute, const CalendarTime::Second& second);
84
85 u64 getUnixTime() const { return mUnixTime; }
86 void getCalendarTime(CalendarTime* time) const;
87
88 DateSpan diff(DateTimeUtc time) const;
89 DateSpan diffToNow() const;
90
91protected:
92 u64 mUnixTime;
93};
94
95DateSpan operator-(DateTimeUtc lhs, DateTimeUtc rhs);
96DateTimeUtc operator-(DateTimeUtc time, DateSpan span);
97DateTimeUtc operator+(DateTimeUtc time, DateSpan span);
98} // namespace sead
99