AceTime  3.0.0
Date and time classes for Arduino that support timezones from the TZ Database.
TimeZone.cpp
1 /*
2  * MIT License
3  * Copyright (c) 2018 Brian T. Park
4  */
5 
6 #include <Print.h>
7 #include "TimeZone.h"
8 #include "TimeOffset.h"
9 
10 namespace ace_time {
11 
12 void TimeZone::printTo(Print& printer) const {
13  switch (mType) {
14  case kTypeError:
15  case kTypeReserved:
16  printer.print("<Error>");
17  break;
18 
19  case kTypeManual:
20  if (isUtc()) {
21  printer.print("UTC");
22  } else {
23  TimeOffset::forMinutes(mStdOffsetMinutes).printTo(printer);
24  TimeOffset::forMinutes(mDstOffsetMinutes).printTo(printer);
25  }
26  break;
27 
28  default:
29  getBoundZoneProcessor()->printNameTo(printer);
30  break;
31  }
32 }
33 
34 void TimeZone::printShortTo(Print& printer) const {
35  switch (mType) {
36  case kTypeError:
37  case kTypeReserved:
38  printer.print("<Error>");
39  break;
40 
41  case kTypeManual:
42  if (isUtc()) {
43  printer.print("UTC");
44  } else {
45  auto utcOffset = TimeOffset::forMinutes(
46  mStdOffsetMinutes + mDstOffsetMinutes);
47  utcOffset.printTo(printer);
48  printer.print('(');
49  printer.print((mDstOffsetMinutes != 0) ? "D" : "S");
50  printer.print(')');
51  }
52  break;
53 
54  default:
55  getBoundZoneProcessor()->printShortNameTo(printer);
56  break;
57  }
58 }
59 
60 void TimeZone::printTargetNameTo(Print& printer) const {
61  if (isLink()) {
62  getBoundZoneProcessor()->printTargetNameTo(printer);
63  }
64 }
65 
66 }
static TimeOffset forMinutes(int16_t minutes)
Create TimeOffset from minutes from 00:00.
Definition: TimeOffset.h:91
void printTo(Print &printer) const
Print the human readable string, including a "-" or "+" prefix, in the form of "+/-hh:mm" or "+/-hh:m...
Definition: TimeOffset.cpp:15
void printTo(Print &printer) const
Print the text representation of the time zone using the full canonical time zone name or UTC offset ...
Definition: TimeZone.cpp:12
void printTargetNameTo(Print &printer) const
Print the name of the target zone if the current time zone is a Link.
Definition: TimeZone.cpp:60
bool isUtc() const
Return true if UTC (+00:00+00:00).
Definition: TimeZone.h:463
bool isLink() const
Return true if timezone is a Link entry pointing to a Zone entry.
Definition: TimeZone.h:271
void printShortTo(Print &printer) const
Print the short human readable representation of the time zone.
Definition: TimeZone.cpp:34
static const uint8_t kTypeError
A TimeZone that represents an invalid condition.
Definition: TimeZone.h:89
static const uint8_t kTypeReserved
Reserved for future use.
Definition: TimeZone.h:95
static const uint8_t kTypeManual
Manual STD offset and DST offset.
Definition: TimeZone.h:92
virtual void printTargetNameTo(Print &printer) const =0
Print the full identifier (e.g.
virtual void printNameTo(Print &printer) const =0
Print a human-readable identifier (e.g.
virtual void printShortNameTo(Print &printer) const =0
Print a short human-readable identifier (e.g.