ZonedTime.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "DateTime.h"
4 #include <Data/CString.h>
5 
24 class ZonedTime
25 {
26 public:
32  ZonedTime(time_t utc, const DateTime::ZoneInfo& zoneInfo) : utc(utc), zoneInfo(zoneInfo)
33  {
34  }
35 
39  explicit ZonedTime(time_t utc = 0) : utc(utc), zoneInfo{{"UTC"}}
40  {
41  }
42 
43  ZonedTime(const ZonedTime& other) = default;
44 
45  operator time_t() const
46  {
47  return utc;
48  }
49 
55  ZonedTime toUtc() const
56  {
57  return ZonedTime(utc);
58  }
59 
63  time_t local() const
64  {
65  return utc + zoneInfo.offsetSecs();
66  }
67 
72  {
73  return zoneInfo;
74  }
75 
77  {
78  return zoneInfo.tag;
79  }
80 
81  int16_t offsetMins() const
82  {
83  return zoneInfo.offsetMins;
84  }
85 
86  int offsetSecs() const
87  {
88  return zoneInfo.offsetSecs();
89  }
90 
91  bool isDst() const
92  {
93  return zoneInfo.isDst;
94  }
95 
101  String format(const char* formatString) const
102  {
103  DateTime dt(local());
104  return dt.format(formatString, &zoneInfo);
105  }
106 
107  String format(const String& formatString) const
108  {
109  return format(formatString.c_str());
110  }
111 
113  {
114  DateTime dt(local());
115  return dt.toISO8601(&zoneInfo);
116  }
122  String toString() const
123  {
124  return format(defaultFormat ? defaultFormat.c_str() : _F("%a %d %b %Y %T %Z"));
125  }
126 
130  static void setDefaultFormat(const String& format)
131  {
132  defaultFormat = format;
133  }
134 
135 private:
136  static CString defaultFormat;
137  time_t utc;
138  DateTime::ZoneInfo zoneInfo;
139 };
Class to manage a NUL-terminated C-style string When storing persistent strings in RAM the regular St...
Definition: CString.h:27
Date and time class.
Definition: DateTime.h:139
String toISO8601(const ZoneInfo *zone=nullptr) const
Get human readable date and time.
String format(const char *formatString, const ZoneInfo *zone=nullptr) const
Create string formatted with time and date placeholders.
The String class.
Definition: WString.h:133
const char * c_str() const
Get a constant (un-modifiable) pointer to String content.
Definition: WString.h:609
A timestamp representing a UTC 'point in time' associated with a specific timezone.
Definition: ZonedTime.h:25
ZonedTime toUtc() const
Get a ZonedTime instance translated into the UTC zone This does nothing more than replace the contain...
Definition: ZonedTime.h:55
bool isDst() const
Definition: ZonedTime.h:91
int16_t offsetMins() const
Definition: ZonedTime.h:81
ZonedTime(time_t utc, const DateTime::ZoneInfo &zoneInfo)
Construct a zoned time.
Definition: ZonedTime.h:32
ZonedTime(time_t utc=0)
Construct a time in the UTC zone.
Definition: ZonedTime.h:39
ZonedTime(const ZonedTime &other)=default
static void setDefaultFormat(const String &format)
Set the default format for displaying zoned times.
Definition: ZonedTime.h:130
String format(const char *formatString) const
Definition: ZonedTime.h:101
String toISO8601() const
Definition: ZonedTime.h:112
const DateTime::ZoneInfo::Tag & tag() const
Definition: ZonedTime.h:76
String toString() const
Obtain default formatted string.
Definition: ZonedTime.h:122
const DateTime::ZoneInfo & getZoneInfo() const
Get instance zone information.
Definition: ZonedTime.h:71
int offsetSecs() const
Definition: ZonedTime.h:86
String format(const String &formatString) const
Definition: ZonedTime.h:107
time_t local() const
Obtain the time_t value adjusted for local time.
Definition: ZonedTime.h:63
#define _F(str)
Definition: FakePgmSpace.h:97
Type for timezone abbreviation such as "GMT", "EEST".
Definition: DateTime.h:148
Basic information required when displaying or handling local times.
Definition: DateTime.h:144