AceTime  0.5.2
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 #include "common/util.h"
11 
12 class Print;
13 
14 namespace ace_time {
15 
22 class TimePeriod {
23  public:
34  explicit TimePeriod(uint8_t hour, uint8_t minute, uint8_t second,
35  int8_t sign = 1):
36  mHour(hour),
37  mMinute(minute),
38  mSecond(second),
39  mSign(sign) {}
40 
48  explicit TimePeriod(int32_t seconds = 0) {
49  if (seconds < 0) {
50  mSign = -1;
51  seconds = -seconds;
52  } else {
53  mSign = 1;
54  }
55  mSecond = seconds % 60;
56  seconds /= 60;
57  mMinute = seconds % 60;
58  seconds /= 60;
59  mHour = seconds;
60  }
61 
63  uint8_t hour() const { return mHour; }
64 
66  void hour(uint8_t hour) { mHour = hour; }
67 
69  uint8_t minute() const { return mMinute; }
70 
72  void minute(uint8_t minute) { mMinute = minute; }
73 
75  uint8_t second() const { return mSecond; }
76 
78  void second(uint8_t second) { mSecond = second; }
79 
81  int8_t sign() const { return mSign; }
82 
88  void sign(int8_t sign) { mSign = sign; }
89 
95  int32_t toSeconds() const {
96  int32_t seconds = ((mHour * (int16_t) 60) + mMinute) * (int32_t) 60
97  + mSecond;
98  return (mSign >= 0) ? seconds : -seconds;
99  }
100 
105  int8_t compareTo(const TimePeriod& that) const {
106  int32_t thisSeconds = toSeconds();
107  int32_t thatSeconds = that.toSeconds();
108  if (thisSeconds < thatSeconds) {
109  return -1;
110  } else if (thisSeconds == thatSeconds) {
111  return 0;
112  } else {
113  return 1;
114  }
115  }
116 
123  void printTo(Print& printer) const;
124 
125  // Use default copy constructor and assignment operator.
126  TimePeriod(const TimePeriod&) = default;
127  TimePeriod& operator=(const TimePeriod&) = default;
128 
129  private:
130  friend bool operator==(const TimePeriod& a, const TimePeriod& b);
131 
132  uint8_t mHour; // [0, 255], normally hour < 24
133  uint8_t mMinute; // [0, 59], normally minute < 60
134  uint8_t mSecond; // [0, 59], normally second < 60
135 
143  int8_t mSign;
144 };
145 
150 inline bool operator==(const TimePeriod& a, const TimePeriod& b) {
151  return a.mSecond == b.mSecond
152  && a.mMinute == b.mMinute
153  && a.mHour == b.mHour
154  && a.mSign == b.mSign;
155 }
156 
158 inline bool operator!=(const TimePeriod& a, const TimePeriod& b) {
159  return ! (a == b);
160 }
161 
162 }
163 
164 #endif
int8_t sign() const
Return the sign bit.
Definition: TimePeriod.h:81
TimePeriod(uint8_t hour, uint8_t minute, uint8_t second, int8_t sign=1)
Constructor.
Definition: TimePeriod.h:34
uint8_t second() const
Return the second.
Definition: TimePeriod.h:75
uint8_t hour() const
Return the hour.
Definition: TimePeriod.h:63
int32_t toSeconds() const
Convert to number of seconds.
Definition: TimePeriod.h:95
Represents a period of time relative to some known point in time, potentially represented by a DateTi...
Definition: TimePeriod.h:22
void hour(uint8_t hour)
Set the hour.
Definition: TimePeriod.h:66
void minute(uint8_t minute)
Set the minute.
Definition: TimePeriod.h:72
friend bool operator==(const TimePeriod &a, const TimePeriod &b)
Return true if two TimePeriod objects are equal.
Definition: TimePeriod.h:150
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:105
void sign(int8_t sign)
Set the sign bit.
Definition: TimePeriod.h:88
TimePeriod(int32_t seconds=0)
Constructor from number of seconds.
Definition: TimePeriod.h:48
void printTo(Print &printer) const
Print to given printer.
Definition: TimePeriod.cpp:13
uint8_t minute() const
Return the minute.
Definition: TimePeriod.h:69
void second(uint8_t second)
Set the second.
Definition: TimePeriod.h:78