semf
time.cpp
Go to the documentation of this file.
1
12
13namespace semf
14{
15Time::Time(const Time& timeToSet)
16{
17 setTime(timeToSet.millisecond(), timeToSet.second(), timeToSet.minute(), timeToSet.hour());
18}
19
20Time::Time(uint16_t millisecond, uint8_t second, uint8_t minute, uint8_t hour)
21{
23}
24
25bool Time::setTime(uint16_t millisecond, uint8_t second, uint8_t minute, uint8_t hour)
26{
28 {
29 m_millisecond = millisecond;
30 m_second = second;
31 m_minute = minute;
32 m_hour = hour;
33 SEMF_INFO("setTime to: h %u; m %u; s %u; mi %u", hour, minute, second, millisecond);
34 return true;
35 }
36 else
37 {
38 SEMF_ERROR("invalid parameter in setTime: h %u; m %u; s %u; mi %u", hour, minute, second, millisecond);
39 return false;
40 }
41}
42
43uint16_t Time::millisecond() const
44{
45 return m_millisecond;
46}
47
48bool Time::setMillisecond(uint16_t millisecond)
49{
50 if (millisecond < 1000)
51 {
52 m_millisecond = millisecond;
53 SEMF_INFO("setMillisecond to %u", millisecond);
54 return true;
55 }
56 else
57 {
58 SEMF_ERROR("invalid parameter in setMillisecond: %u", millisecond);
59 return false;
60 }
61}
62
63uint8_t Time::second() const
64{
65 return m_second;
66}
67
68bool Time::setSecond(uint8_t second)
69{
70 if (second < 60)
71 {
72 m_second = second;
73 SEMF_INFO("setSecond to %u", second);
74 return true;
75 }
76 else
77 {
78 SEMF_ERROR("invalid parameter in setSecond: %u", second);
79 return false;
80 }
81}
82
83uint8_t Time::minute() const
84{
85 return m_minute;
86}
87
88bool Time::setMinute(uint8_t minute)
89{
90 if (minute < 60)
91 {
92 m_minute = minute;
93 SEMF_INFO("setMinute to %u", minute);
94 return true;
95 }
96 else
97 {
98 SEMF_ERROR("invalid parameter in setMinute: %u", minute);
99 return false;
100 }
101}
102
103uint8_t Time::hour() const
104{
105 return m_hour;
106}
107
108bool Time::setHour(uint8_t hour)
109{
110 if (hour < 24)
111 {
112 m_hour = hour;
113 SEMF_INFO("setHour to %u", hour);
114 return true;
115 }
116 else
117 {
118 SEMF_ERROR("invalid parameter in setHour: %u", hour);
119 return false;
120 }
121}
122
123void Time::addMilliseconds(int32_t milliseconds)
124{
125 int32_t addsec = 0;
126
127 if (milliseconds >= 0)
128 {
129 addsec = milliseconds / 1000;
130 milliseconds -= addsec * 1000;
131 addsec += (millisecond() + milliseconds) / 1000;
132 m_millisecond = static_cast<uint16_t>((m_millisecond + milliseconds) % 1000);
133 }
134 else
135 {
136 if ((static_cast<int32_t>(millisecond()) + milliseconds) >= 0)
137 {
138 m_millisecond = static_cast<uint16_t>((milliseconds + m_millisecond) % 1000);
139 }
140 else
141 {
142 addsec = ((milliseconds + millisecond()) / 1000) - 1;
143 m_millisecond = static_cast<uint16_t>((milliseconds + m_millisecond + 1000) % 1000);
144 }
145 }
146 SEMF_INFO("addMilliseconds to %u", m_millisecond);
147 addSeconds(addsec);
148}
149
150void Time::addSeconds(int32_t seconds)
151{
152 int32_t addmin = 0;
153
154 if (seconds >= 0)
155 {
156 addmin = seconds / 60;
157 seconds -= addmin * 60;
158 addmin += (second() + seconds) / 60;
159 m_second = static_cast<uint8_t>((m_second + seconds) % 60);
160 }
161 else
162 {
163 if ((static_cast<int32_t>(second()) + seconds) >= 0)
164 {
165 m_second = static_cast<uint8_t>((seconds + m_second) % 60);
166 }
167 else
168 {
169 addmin = ((seconds + second()) / 60) - 1;
170 m_second = static_cast<uint8_t>(((seconds + m_second) % 60) + 60);
171 }
172 }
173 SEMF_INFO("addSeconds to %u", m_second);
174 addMinutes(addmin);
175}
176
177void Time::addMinutes(int32_t minutes)
178{
179 int32_t addhours = 0;
180
181 if (minutes >= 0)
182 {
183 addhours = minutes / 60;
184 minutes -= addhours * 60;
185 addhours += (minute() + minutes) / 60;
186 m_minute = static_cast<uint8_t>((m_minute + minutes) % 60);
187 }
188 else
189 {
190 if ((static_cast<int32_t>(minute()) + minutes) >= 0)
191 {
192 m_minute = static_cast<uint8_t>((minutes + m_minute) % 60);
193 }
194 else
195 {
196 addhours = ((minutes + minute()) / 60) - 1;
197 m_minute = static_cast<uint8_t>((minutes + m_minute % 60) + 60);
198 }
199 }
200 SEMF_INFO("addMinutes to %u", m_minute);
201 addHours(addhours);
202}
203
204void Time::addHours(int32_t hours)
205{
206 if (hours >= 0)
207 {
208 m_hour = static_cast<uint8_t>((hours + m_hour) % 24);
209 }
210 else
211 {
212 if ((static_cast<int32_t>(hour()) + hours) >= 0)
213 {
214 m_hour = static_cast<uint8_t>((hours + m_hour) % 24);
215 }
216 else
217 {
218 m_hour = static_cast<uint8_t>((hours + m_hour % 24) + 24);
219 }
220 }
221 SEMF_INFO("addHours to %u", m_hour);
222}
223
225{
226 return 3600 * hour() + 60 * minute() + second();
227}
228
230{
231 return secondsSinceStartOfDay() * 1000 + millisecond();
232}
233
234int32_t Time::timeSpan(const Time& subtract) const
235{
236 return static_cast<int32_t>(millisecondsSinceStartOfDay()) - static_cast<int32_t>(subtract.millisecondsSinceStartOfDay());
237}
238
239Time& Time::operator=(const Time& timeToSet)
240{
241 setTime(timeToSet.millisecond(), timeToSet.second(), timeToSet.minute(), timeToSet.hour());
242 return *this;
243}
244
245bool Time::operator==(const Time& timeToCompareWith) const
246{
247 if (hour() == timeToCompareWith.hour() && minute() == timeToCompareWith.minute() && second() == timeToCompareWith.second() &&
248 millisecond() == timeToCompareWith.millisecond())
249 {
250 return true;
251 }
252 else
253 {
254 return false;
255 }
256}
257
258bool Time::operator!=(const Time& timeToCompareWith) const
259{
260 return !(*this == timeToCompareWith);
261}
262
263bool Time::operator<(const Time& timeToCompareWith) const
264{
265 if (hour() > timeToCompareWith.hour() || (hour() == timeToCompareWith.hour() && minute() > timeToCompareWith.minute()) ||
266 (hour() == timeToCompareWith.hour() && minute() == timeToCompareWith.minute() && second() > timeToCompareWith.second()) ||
267 (hour() == timeToCompareWith.hour() && minute() == timeToCompareWith.minute() && second() == timeToCompareWith.second() &&
268 millisecond() >= timeToCompareWith.millisecond()))
269 {
270 return false;
271 }
272 else
273 {
274 return true;
275 }
276}
277
278bool Time::operator<=(const Time& timeToCompareWith) const
279{
280 if (*this < timeToCompareWith || *this == timeToCompareWith)
281 {
282 return true;
283 }
284 else
285 {
286 return false;
287 }
288}
289
290bool Time::operator>(const Time& timeToCompareWith) const
291{
292 return !(*this <= timeToCompareWith);
293}
294
295bool Time::operator>=(const Time& timeToCompareWith) const
296{
297 return !(*this < timeToCompareWith);
298}
299
300bool Time::isValid(uint16_t millisecond, uint8_t second, uint8_t minute, uint8_t hour)
301{
302 return (millisecond < 1000 && second < 60 && minute < 60 && hour < 24) ? true : false;
303}
304} /* namespace semf */
The Time class provides clock time functions.
Definition: time.h:37
bool setMinute(uint8_t minute)
Sets the minutes.
Definition: time.cpp:88
uint16_t millisecond() const
Returns the milliseconds from system clock or static value.
Definition: time.cpp:43
int32_t timeSpan(const Time &subtract) const
Returns a time difference between this time and subtract.
Definition: time.cpp:234
static bool isValid(uint16_t millisecond, uint8_t second, uint8_t minute, uint8_t hour)
Returns if the given time is valid.
Definition: time.cpp:300
bool setTime(uint16_t millisecond, uint8_t second, uint8_t minute, uint8_t hour)
Sets date time information and system clock if Rtc is registered.
Definition: time.cpp:25
bool operator<=(const Time &timeToCompareWith) const
Compares this time with other.
Definition: time.cpp:278
bool operator<(const Time &timeToCompareWith) const
Compares this time with other.
Definition: time.cpp:263
bool setMillisecond(uint16_t millisecond)
Sets the milliseconds.
Definition: time.cpp:48
uint32_t millisecondsSinceStartOfDay() const
Returns the milliseconds since start of the day.
Definition: time.cpp:229
bool setSecond(uint8_t second)
Sets the seconds.
Definition: time.cpp:68
void addMilliseconds(int32_t milliseconds)
Adds milliseconds to this time.
Definition: time.cpp:123
bool setHour(uint8_t hour)
Sets the hours.
Definition: time.cpp:108
bool operator>=(const Time &timeToCompareWith) const
Compares this time with other.
Definition: time.cpp:295
void addSeconds(int32_t seconds)
Adds seconds to this time.
Definition: time.cpp:150
bool operator!=(const Time &timeToCompareWith) const
Compares this time with other.
Definition: time.cpp:258
uint32_t secondsSinceStartOfDay() const
Returns the seconds since start of the day.
Definition: time.cpp:224
Time()=default
bool operator>(const Time &timeToCompareWith) const
Compares this time with other.
Definition: time.cpp:290
uint8_t second() const
Returns the seconds from system clock or static value.
Definition: time.cpp:63
bool operator==(const Time &timeToCompareWith) const
Compares this time with other.
Definition: time.cpp:245
void addMinutes(int32_t minutes)
Adds minutes to this time.
Definition: time.cpp:177
uint8_t minute() const
Returns the minutes.
Definition: time.cpp:83
void addHours(int32_t hours)
Adds hours to this time.
Definition: time.cpp:204
Time & operator=(const Time &timeToSet)
Copies the time.
Definition: time.cpp:239
uint8_t hour() const
Returns the hours.
Definition: time.cpp:103
#define SEMF_ERROR(...)
Definition: debug.h:39
#define SEMF_INFO(...)
Definition: debug.h:41