AceTime  0.3
Date and time classes for Arduino that support timezones from the TZ Database, and a system clock that can synchronize 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  int32_t toSeconds() const {
91  int32_t seconds = ((mHour * (int16_t) 60) + mMinute) * (int32_t) 60
92  + mSecond;
93  return (mSign >= 0) ? seconds : -seconds;
94  }
95 
100  int8_t compareTo(const TimePeriod& that) const {
101  int32_t thisSeconds = toSeconds();
102  int32_t thatSeconds = that.toSeconds();
103  if (thisSeconds < thatSeconds) {
104  return -1;
105  } else if (thisSeconds == thatSeconds) {
106  return 0;
107  } else {
108  return 1;
109  }
110  }
111 
118  void printTo(Print& printer) const;
119 
120  // Use default copy constructor and assignment operator.
121  TimePeriod(const TimePeriod&) = default;
122  TimePeriod& operator=(const TimePeriod&) = default;
123 
124  private:
125  friend bool operator==(const TimePeriod& a, const TimePeriod& b);
126 
127  uint8_t mHour; // [0, 255], normally hour < 24
128  uint8_t mMinute; // [0, 59], normally minute < 60
129  uint8_t mSecond; // [0, 59], normally second < 60
130 
138  int8_t mSign;
139 };
140 
145 inline bool operator==(const TimePeriod& a, const TimePeriod& b) {
146  return a.mSecond == b.mSecond
147  && a.mMinute == b.mMinute
148  && a.mHour == b.mHour
149  && a.mSign == b.mSign;
150 }
151 
153 inline bool operator!=(const TimePeriod& a, const TimePeriod& b) {
154  return ! (a == b);
155 }
156 
157 }
158 
159 #endif
int8_t sign() const
Return the sign bit.
Definition: TimePeriod.h:76
TimePeriod(uint8_t hour, uint8_t minute, uint8_t second, int8_t sign=1)
Constructor.
Definition: TimePeriod.h:29
uint8_t second() const
Return the second.
Definition: TimePeriod.h:70
uint8_t hour() const
Return the hour.
Definition: TimePeriod.h:58
int32_t toSeconds() const
Convert to number of seconds.
Definition: TimePeriod.h:90
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
friend bool operator==(const TimePeriod &a, const TimePeriod &b)
Return true if two TimePeriod objects are equal.
Definition: TimePeriod.h:145
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:100
void sign(int8_t sign)
Set the sign bit.
Definition: TimePeriod.h:83
TimePeriod(int32_t seconds=0)
Constructor from number of seconds.
Definition: TimePeriod.h:43
void printTo(Print &printer) const
Print to given printer.
Definition: TimePeriod.cpp:8
uint8_t minute() const
Return the minute.
Definition: TimePeriod.h:64
void second(uint8_t second)
Set the second.
Definition: TimePeriod.h:73