AceTime  1.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 /*
2  * MIT License
3  * Copyright (c) 2018 Brian T. Park
4  */
5 
6 #ifndef ACE_TIME_TIME_PERIOD_H
7 #define ACE_TIME_TIME_PERIOD_H
8 
9 #include <stdint.h>
10 
11 class Print;
12 
13 namespace ace_time {
14 
21 class TimePeriod {
22  public:
33  explicit TimePeriod(uint8_t hour, uint8_t minute, uint8_t second,
34  int8_t sign = 1):
35  mHour(hour),
36  mMinute(minute),
37  mSecond(second),
38  mSign(sign) {}
39 
47  explicit TimePeriod(int32_t seconds = 0) {
48  if (seconds < 0) {
49  mSign = -1;
50  seconds = -seconds;
51  } else {
52  mSign = 1;
53  }
54  mSecond = seconds % 60;
55  seconds /= 60;
56  mMinute = seconds % 60;
57  seconds /= 60;
58  mHour = seconds;
59  }
60 
62  uint8_t hour() const { return mHour; }
63 
65  void hour(uint8_t hour) { mHour = hour; }
66 
68  uint8_t minute() const { return mMinute; }
69 
71  void minute(uint8_t minute) { mMinute = minute; }
72 
74  uint8_t second() const { return mSecond; }
75 
77  void second(uint8_t second) { mSecond = second; }
78 
80  int8_t sign() const { return mSign; }
81 
87  void sign(int8_t sign) { mSign = sign; }
88 
94  int32_t toSeconds() const {
95  int32_t seconds = ((mHour * (int16_t) 60) + mMinute) * (int32_t) 60
96  + mSecond;
97  return (mSign >= 0) ? seconds : -seconds;
98  }
99 
104  int8_t compareTo(const TimePeriod& that) const {
105  int32_t thisSeconds = toSeconds();
106  int32_t thatSeconds = that.toSeconds();
107  if (thisSeconds < thatSeconds) {
108  return -1;
109  } else if (thisSeconds == thatSeconds) {
110  return 0;
111  } else {
112  return 1;
113  }
114  }
115 
122  void printTo(Print& printer) const;
123 
124  // Use default copy constructor and assignment operator.
125  TimePeriod(const TimePeriod&) = default;
126  TimePeriod& operator=(const TimePeriod&) = default;
127 
128  private:
129  friend bool operator==(const TimePeriod& a, const TimePeriod& b);
130 
131  uint8_t mHour; // [0, 255], normally hour < 24
132  uint8_t mMinute; // [0, 59], normally minute < 60
133  uint8_t mSecond; // [0, 59], normally second < 60
134 
142  int8_t mSign;
143 };
144 
149 inline bool operator==(const TimePeriod& a, const TimePeriod& b) {
150  return a.mSecond == b.mSecond
151  && a.mMinute == b.mMinute
152  && a.mHour == b.mHour
153  && a.mSign == b.mSign;
154 }
155 
157 inline bool operator!=(const TimePeriod& a, const TimePeriod& b) {
158  return ! (a == b);
159 }
160 
161 }
162 
163 #endif
ace_time::TimePeriod::second
void second(uint8_t second)
Set the second.
Definition: TimePeriod.h:77
ace_time::TimePeriod
Represents a period of time relative to some known point in time, potentially represented by a DateTi...
Definition: TimePeriod.h:21
ace_time::TimePeriod::second
uint8_t second() const
Return the second.
Definition: TimePeriod.h:74
ace_time::TimePeriod::hour
uint8_t hour() const
Return the hour.
Definition: TimePeriod.h:62
ace_time::TimePeriod::sign
int8_t sign() const
Return the sign bit.
Definition: TimePeriod.h:80
ace_time::TimePeriod::toSeconds
int32_t toSeconds() const
Convert to number of seconds.
Definition: TimePeriod.h:94
ace_time::TimePeriod::hour
void hour(uint8_t hour)
Set the hour.
Definition: TimePeriod.h:65
ace_time::TimePeriod::TimePeriod
TimePeriod(uint8_t hour, uint8_t minute, uint8_t second, int8_t sign=1)
Constructor.
Definition: TimePeriod.h:33
ace_time::TimePeriod::minute
void minute(uint8_t minute)
Set the minute.
Definition: TimePeriod.h:71
ace_time::TimePeriod::operator==
friend bool operator==(const TimePeriod &a, const TimePeriod &b)
Return true if two TimePeriod objects are equal.
Definition: TimePeriod.h:149
ace_time::TimePeriod::TimePeriod
TimePeriod(int32_t seconds=0)
Constructor from number of seconds.
Definition: TimePeriod.h:47
ace_time::TimePeriod::compareTo
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:104
ace_time::TimePeriod::sign
void sign(int8_t sign)
Set the sign bit.
Definition: TimePeriod.h:87
ace_time::TimePeriod::printTo
void printTo(Print &printer) const
Print to given printer.
Definition: TimePeriod.cpp:14
ace_time::TimePeriod::minute
uint8_t minute() const
Return the minute.
Definition: TimePeriod.h:68