1 #ifndef _MY_TIME_DELTA_
2 #define _MY_TIME_DELTA_
9 #include "datetime_exceptions.h"
10 #include "datetime_constants.h"
22 long long m_totalSeconds = 0;
23 long long m_totalDays = 0;
26 long long m_seconds = 0;
27 long long m_minutes = 0;
28 long long m_hours = 0;
67 TimeDelta(
const long long &days,
const long long &hours,
const long long &minutes,
const long long &seconds)
69 set(days, hours, minutes, seconds);
85 void set(
const long long &days,
const long long &hours,
const long long &minutes,
const long long &seconds)
87 m_totalSeconds = ((days * 24 + hours) * 60 + minutes) * 60 + seconds;
96 return m_totalSeconds;
104 return m_totalSeconds / 60;
112 return m_totalSeconds / 3600;
128 return m_totalDays / 7;
137 return {m_totalDays, m_hours, m_minutes, m_seconds};
146 std::stringstream ss;
148 <<
"days=" << m_totalDays
149 <<
", hours=" << m_hours
150 <<
", minutes=" << m_minutes
151 <<
", seconds=" << m_seconds
160 TimeDelta operator-()
const
162 return TimeDelta(-m_totalSeconds);
178 long long retSeconds = m_totalSeconds + right;
186 TimeDelta operator-(
const long long &right)
const
188 return operator+(-right);
196 long long retSeconds = double(m_totalSeconds) * right;
205 if (std::abs(right.
totalSeconds()) < DatetimeConstants::DOUBLE_EPSILON)
217 if (std::abs(right) < DatetimeConstants::DOUBLE_EPSILON)
221 long long retSeconds = double(m_totalSeconds) / right;
225 TimeDelta &operator+=(
const long long &right)
227 m_totalSeconds += right;
231 TimeDelta &operator+=(
const TimeDelta &right)
233 return operator+=(right.totalSeconds());
236 TimeDelta &operator-=(
const long long &right)
238 return operator+=(-right);
240 TimeDelta &operator-=(
const TimeDelta &right)
242 return operator+=(-right.totalSeconds());
245 TimeDelta &operator*=(
const double &right)
247 m_totalSeconds = double(m_totalSeconds) * right;
252 TimeDelta &operator/=(
const double &right)
254 return operator*=(1.0 / right);
258 void parseTotalSeconds()
260 long long remainedSecondsOfDay = m_totalSeconds % (24 * 3600);
261 m_hours = remainedSecondsOfDay / 3600;
262 m_minutes = remainedSecondsOfDay % 3600 / 60;
263 m_seconds = remainedSecondsOfDay % 3600 % 60;
264 m_totalDays = m_totalSeconds / (24 * 3600);
272 bool operator==(
const TimeDelta &left,
const TimeDelta &right)
274 return left.totalSeconds() == right.totalSeconds();
277 bool operator==(
const TimeDelta &left,
const long long &right)
279 return left.totalSeconds() == right;
282 bool operator==(
const long long &left,
const TimeDelta &right)
284 return left == right.totalSeconds();
287 bool operator!=(
const TimeDelta &left,
const TimeDelta &right)
289 return !operator==(left, right);
292 bool operator!=(
const TimeDelta &left,
const long long &right)
294 return !operator==(left, right);
297 bool operator!=(
const long long &left,
const TimeDelta &right)
299 return !operator==(left, right);
302 bool operator>(
const TimeDelta &left,
const long long &right)
304 return left.totalSeconds() > right;
307 bool operator>(
const long long &left,
const TimeDelta &right)
309 return left > right.totalSeconds();
312 bool operator<(
const TimeDelta &left,
const long long &right)
314 return left.totalSeconds() < right;
317 bool operator<(
const long long &left,
const TimeDelta &right)
319 return left < right.totalSeconds();
322 bool operator>=(
const TimeDelta &left,
const long long &right)
324 return left == right || left > right;
327 bool operator>=(
const long long &left,
const TimeDelta &right)
329 return left == right || left > right;
332 bool operator<=(
const TimeDelta &left,
const long long &right)
334 return left == right || left < right;
337 bool operator<=(
const long long &left,
const TimeDelta &right)
339 return left == right || left < right;
342 std::ostream &operator<<(std::ostream &stream,
const TimeDelta &timeDelta)
344 stream << timeDelta.str();
348 const TimeDelta operator*(
const double &left,
const TimeDelta right)
350 return TimeDelta(
double(right.totalSeconds()) * left);
Definition: datetime_exceptions.h:9
TimeDelta object.
Definition: time_delta.h:19
TimeDelta(const long long &totalSeconds)
Definition: time_delta.h:45
TimeDelta operator*(const double &right) const
Definition: time_delta.h:194
double operator/(const TimeDelta &right) const
Definition: time_delta.h:203
long long totalDays() const
Definition: time_delta.h:118
std::vector< long long > toVector() const
Definition: time_delta.h:135
TimeDelta operator/(const double &right) const
Definition: time_delta.h:215
TimeDelta operator+(const long long &right) const
Definition: time_delta.h:176
long long totalHours() const
Definition: time_delta.h:110
long long totalWeeks() const
Definition: time_delta.h:126
void set(const long long &days, const long long &hours, const long long &minutes, const long long &seconds)
Definition: time_delta.h:85
std::string str() const
Definition: time_delta.h:144
long long totalMinutes() const
Definition: time_delta.h:102
TimeDelta operator+(const TimeDelta &right) const
Definition: time_delta.h:168
long long totalSeconds() const
Definition: time_delta.h:94
TimeDelta(const long long &days, const long long &hours, const long long &minutes, const long long &seconds)
Definition: time_delta.h:67