AceTime  0.1
Date and time classes for Arduino that supports the TZ DAtabase, and a system clock synchronized from an NTP server or an RTC chip.
TimePeriod.h
1 #ifndef ACE_TIME_TIME_PERIOD_H
2 #define ACE_TIME_TIME_PERIOD_H
3 
4 #include <stdint.h>
5 #include "common/util.h"
6 
7 class Print;
8 
9 namespace ace_time {
10 
17 class TimePeriod {
18  public:
29  explicit TimePeriod(uint8_t hour, uint8_t minute, uint8_t second,
30  int8_t sign = 1):
31  mHour(hour),
32  mMinute(minute),
33  mSecond(second),
34  mSign(sign) {}
35 
43  explicit TimePeriod(int32_t seconds = 0) {
44  if (seconds < 0) {
45  mSign = -1;
46  seconds = -seconds;
47  } else {
48  mSign = 1;
49  }
50  mSecond = seconds % 60;
51  seconds /= 60;
52  mMinute = seconds % 60;
53  seconds /= 60;
54  mHour = seconds;
55  }
56 
58  uint8_t hour() const { return mHour; }
59 
61  void hour(uint8_t hour) { mHour = hour; }
62 
64  uint8_t minute() const { return mMinute; }
65 
67  void minute(uint8_t minute) { mMinute = minute; }
68 
70  uint8_t second() const { return mSecond; }
71 
73  void second(uint8_t second) { mSecond = second; }
74 
76  int8_t sign() const { return mSign; }
77 
83  void sign(int8_t sign) { mSign = sign; }
84 
90  void printTo(Print& printer) const;
91 
97  int32_t toSeconds() const {
98  int32_t seconds = ((mHour * (int16_t) 60) + mMinute) * (int32_t) 60
99  + mSecond;
100  return (mSign >= 0) ? seconds : -seconds;
101  }
102 
104  void negate() { mSign = -mSign; }
105 
107  void incrementHour() {
108  common::incrementMod(mHour, (uint8_t) 24);
109  }
110 
112  void incrementHour(uint8_t limit) {
113  common::incrementMod(mHour, limit);
114  }
115 
118  common::incrementMod(mMinute, (uint8_t) 60);
119  }
120 
125  int8_t compareTo(const TimePeriod& that) const {
126  int32_t thisSeconds = toSeconds();
127  int32_t thatSeconds = that.toSeconds();
128  if (thisSeconds < thatSeconds) {
129  return -1;
130  } else if (thisSeconds == thatSeconds) {
131  return 0;
132  } else {
133  return 1;
134  }
135  }
136 
137  // Use default copy constructor and assignment operator.
138  TimePeriod(const TimePeriod&) = default;
139  TimePeriod& operator=(const TimePeriod&) = default;
140 
141  private:
142  friend bool operator==(const TimePeriod& a, const TimePeriod& b);
143 
144  uint8_t mHour; // [0, 255], normally hour < 24
145  uint8_t mMinute; // [0, 59], normally minute < 60
146  uint8_t mSecond; // [0, 59], normally second < 60
147 
155  int8_t mSign;
156 };
157 
162 inline bool operator==(const TimePeriod& a, const TimePeriod& b) {
163  return a.mSecond == b.mSecond
164  && a.mMinute == b.mMinute
165  && a.mHour == b.mHour
166  && a.mSign == b.mSign;
167 }
168 
170 inline bool operator!=(const TimePeriod& a, const TimePeriod& b) {
171  return ! (a == b);
172 }
173 
174 }
175 
176 #endif
int8_t sign() const
Return the sign bit.
Definition: TimePeriod.h:76
int8_t compareTo(const TimePeriod &that) const
Compare this TimePeriod with another TimePeriod and return (<0, 0, >0) according to (a<b...
Definition: TimePeriod.h:125
TimePeriod(uint8_t hour, uint8_t minute, uint8_t second, int8_t sign=1)
Constructor.
Definition: TimePeriod.h:29
uint8_t hour() const
Return the hour.
Definition: TimePeriod.h:58
uint8_t minute() const
Return the minute.
Definition: TimePeriod.h:64
Represents a period of time relative to some known point in time, potentially represented by a DateTi...
Definition: TimePeriod.h:17
void hour(uint8_t hour)
Set the hour.
Definition: TimePeriod.h:61
void minute(uint8_t minute)
Set the minute.
Definition: TimePeriod.h:67
void incrementHour(uint8_t limit)
Increment the hour by one, modulo &#39;limit&#39;.
Definition: TimePeriod.h:112
void incrementMinute()
Increment the minute by one, modulo 60.
Definition: TimePeriod.h:117
friend bool operator==(const TimePeriod &a, const TimePeriod &b)
Return true if two TimePeriod objects are equal.
Definition: TimePeriod.h:162
void sign(int8_t sign)
Set the sign bit.
Definition: TimePeriod.h:83
uint8_t second() const
Return the second.
Definition: TimePeriod.h:70
void printTo(Print &printer) const
Print to given printer.
Definition: TimePeriod.cpp:8
void incrementHour()
Increment the hour component by one, modulo 24.
Definition: TimePeriod.h:107
void negate()
Change the sign of the object.
Definition: TimePeriod.h:104
TimePeriod(int32_t seconds=0)
Constructor from number of seconds.
Definition: TimePeriod.h:43
int32_t toSeconds() const
Convert to number of seconds.
Definition: TimePeriod.h:97
void second(uint8_t second)
Set the second.
Definition: TimePeriod.h:73