AceTime  2.3.0
Date and time classes for Arduino that support timezones from the TZ Database.
ZoneInfoMid.h
1 /*
2  * MIT License
3  * Copyright (c) 2018 Brian T. Park
4  */
5 
6 #ifndef ACE_TIME_ZONE_INFO_MID_H
7 #define ACE_TIME_ZONE_INFO_MID_H
8 
9 #include <stdint.h>
10 
11 namespace ace_time{
12 namespace zoneinfomid {
13 
18 template<typename S>
19 struct ZoneContext {
26  static const int16_t kMaxUntilYear = 32767;
27 
34  static const int16_t kMaxYear = kMaxUntilYear - 1;
35 
44  static const int16_t kMinYear = -32767;
45 
47  static const uint8_t kSuffixW = 0x00;
48 
50  static const uint8_t kSuffixS = 0x10;
51 
53  static const uint8_t kSuffixU = 0x20;
54 
56  int16_t const startYear;
57 
59  int16_t const untilYear;
60 
62  int16_t const startYearAccurate;
63 
65  int16_t const untilYearAccurate;
66 
68  int16_t const baseYear;
69 
71  int16_t const maxTransitions;
72 
74  const char* const tzVersion;
75 
77  uint8_t const numFragments;
78 
80  uint8_t const numLetters;;
81 
83  const char* const* const fragments;
84 
86  const char* const* const letters;
87 };
88 
94 template<typename S>
95 struct ZoneRule {
97  int16_t const fromYear;
98 
100  int16_t const toYear;
101 
103  uint8_t const inMonth;
104 
115  uint8_t const onDayOfWeek;
116 
121  int8_t const onDayOfMonth;
122 
127  uint8_t const atTimeCode;
128 
138  uint8_t const atTimeModifier;
139 
150  uint8_t const deltaCode;
151 
164  uint8_t const letterIndex;
165 };
166 
173 template<typename S>
174 struct ZonePolicy {
175  const ZoneRule<S>* const rules;
176  uint8_t const numRules;
177 };
178 
191 template<typename S>
192 struct ZoneEra {
197  const ZonePolicy<S>* const zonePolicy;
198 
224  const char* const format;
225 
227  int8_t const offsetCode;
228 
246  uint8_t const deltaCode;
247 
251  int16_t const untilYear;
252 
254  uint8_t const untilMonth;
255 
261  uint8_t const untilDay;
262 
267  uint8_t const untilTimeCode;
268 
279  uint8_t const untilTimeModifier;
280 };
281 
286 template<typename S, typename ZC>
287 struct ZoneInfo {
289  const char* const name;
290 
296  uint32_t const zoneId;
297 
299  const ZC* const zoneContext;
300 
316  uint8_t const numEras;
317 
322  const ZoneEra<S>* const eras;
323 
325  const ZoneInfo* const targetInfo;
326 };
327 
328 }
329 }
330 
331 #endif
Metadata about the zone database.
Definition: ZoneInfoMid.h:19
static const uint8_t kSuffixU
Represents 'u' or UTC time.
Definition: ZoneInfoMid.h:53
int16_t const baseYear
Base year for tiny years.
Definition: ZoneInfoMid.h:68
int16_t const untilYearAccurate
Until year of accurate transitions.
Definition: ZoneInfoMid.h:65
const char *const tzVersion
TZ Database version which generated the zone info.
Definition: ZoneInfoMid.h:74
int16_t const startYear
Start year of the zone files as requested.
Definition: ZoneInfoMid.h:56
const char *const *const letters
Zone Rule letters list.
Definition: ZoneInfoMid.h:86
const char *const *const fragments
Zone Name fragment list.
Definition: ZoneInfoMid.h:80
static const int16_t kMaxUntilYear
The maximum value of untilYear.
Definition: ZoneInfoMid.h:26
static const int16_t kMinYear
The minimum value of fromYear and toYear.
Definition: ZoneInfoMid.h:44
int16_t const startYearAccurate
Start year of accurate transitions.
Definition: ZoneInfoMid.h:62
int16_t const maxTransitions
Max number of transitions required in TransitionStorage.
Definition: ZoneInfoMid.h:71
static const uint8_t kSuffixS
Represents 's' or standard time.
Definition: ZoneInfoMid.h:50
static const uint8_t kSuffixW
Represents 'w' or wall time.
Definition: ZoneInfoMid.h:47
static const int16_t kMaxYear
The maximum value fromYear and toYear.
Definition: ZoneInfoMid.h:34
uint8_t const numLetters
Number of fragments.
Definition: ZoneInfoMid.h:80
int16_t const untilYear
Until year of the zone files as requested.
Definition: ZoneInfoMid.h:59
uint8_t const numFragments
Number of fragments.
Definition: ZoneInfoMid.h:77
An entry in ZoneInfo which describes which ZonePolicy was being followed during a particular time per...
Definition: ZoneInfoMid.h:192
uint8_t const untilTimeModifier
The untilTimeModifier is a packed field containing 2 pieces of info:
Definition: ZoneInfoMid.h:279
uint8_t const untilMonth
The month field in UNTIL (1-12).
Definition: ZoneInfoMid.h:254
uint8_t const untilTimeCode
The time field of UNTIL field in 15-minute increments.
Definition: ZoneInfoMid.h:267
int16_t const untilYear
Era is valid until currentTime < untilYear.
Definition: ZoneInfoMid.h:251
uint8_t const deltaCode
This is a composite of two 4-bit fields:
Definition: ZoneInfoMid.h:246
const ZonePolicy< S > *const zonePolicy
Zone policy, determined by the RULES column.
Definition: ZoneInfoMid.h:197
const char *const format
Zone abbreviations (e.g.
Definition: ZoneInfoMid.h:224
int8_t const offsetCode
UTC offset in 15 min increments.
Definition: ZoneInfoMid.h:227
uint8_t const untilDay
The day field in UNTIL (1-31).
Definition: ZoneInfoMid.h:261
Representation of a given time zone, implemented as an array of ZoneEra records.
Definition: ZoneInfoMid.h:287
uint32_t const zoneId
Unique, stable ID of the zone name, created from a hash of the name.
Definition: ZoneInfoMid.h:296
const char *const name
Full name of zone (e.g.
Definition: ZoneInfoMid.h:289
const ZoneEra< S > *const eras
A const ZoneEras* pointer to numEras ZoneEra entries in increasing order of UNTIL time.
Definition: ZoneInfoMid.h:322
uint8_t const numEras
Number of ZoneEra entries.
Definition: ZoneInfoMid.h:316
const ZC *const zoneContext
ZoneContext metadata.
Definition: ZoneInfoMid.h:299
const ZoneInfo *const targetInfo
If Link, points to the target zone info.
Definition: ZoneInfoMid.h:325
A collection of transition rules which describe the DST rules of a given administrative region.
Definition: ZoneInfoMid.h:174
A time zone transition rule.
Definition: ZoneInfoMid.h:95
int16_t const toYear
TO year.
Definition: ZoneInfoMid.h:100
uint8_t const atTimeModifier
The atTimeModifier is a packed field containing 2 pieces of info:
Definition: ZoneInfoMid.h:138
uint8_t const onDayOfWeek
Determined by the ON column.
Definition: ZoneInfoMid.h:115
uint8_t const inMonth
Determined by the IN column.
Definition: ZoneInfoMid.h:103
uint8_t const deltaCode
Determined by the SAVE column and contains the offset from UTC, in 15-min increments.
Definition: ZoneInfoMid.h:150
uint8_t const letterIndex
Determined by the LETTER column.
Definition: ZoneInfoMid.h:164
uint8_t const atTimeCode
Determined by the AT column in units of 15-minutes from 00:00.
Definition: ZoneInfoMid.h:127
int8_t const onDayOfMonth
Determined by the ON column.
Definition: ZoneInfoMid.h:121
int16_t const fromYear
FROM year.
Definition: ZoneInfoMid.h:97