AceTime  2.4.0
Date and time classes for Arduino that support timezones from the TZ Database.
ZoneInfoMid.h
Go to the documentation of this file.
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 
33 namespace ace_time{
34 namespace zoneinfomid {
35 
40 template<typename S>
41 struct ZoneContext {
48  static const int16_t kMaxUntilYear = 32767;
49 
56  static const int16_t kMaxYear = kMaxUntilYear - 1;
57 
66  static const int16_t kMinYear = -32767;
67 
69  static const uint8_t kSuffixW = 0x00;
70 
72  static const uint8_t kSuffixS = 0x10;
73 
75  static const uint8_t kSuffixU = 0x20;
76 
78  int16_t const startYear;
79 
81  int16_t const untilYear;
82 
84  int16_t const startYearAccurate;
85 
87  int16_t const untilYearAccurate;
88 
90  int16_t const baseYear;
91 
93  int16_t const maxTransitions;
94 
96  const char* const tzVersion;
97 
99  uint8_t const numFragments;
100 
102  uint8_t const numLetters;;
103 
105  const char* const* const fragments;
106 
108  const char* const* const letters;
109 };
110 
116 template<typename S>
117 struct ZoneRule {
119  int16_t const fromYear;
120 
122  int16_t const toYear;
123 
125  uint8_t const inMonth;
126 
137  uint8_t const onDayOfWeek;
138 
143  int8_t const onDayOfMonth;
144 
149  uint8_t const atTimeCode;
150 
160  uint8_t const atTimeModifier;
161 
172  uint8_t const deltaCode;
173 
186  uint8_t const letterIndex;
187 };
188 
195 template<typename S>
196 struct ZonePolicy {
197  const ZoneRule<S>* const rules;
198  uint8_t const numRules;
199 };
200 
213 template<typename S>
214 struct ZoneEra {
219  const ZonePolicy<S>* const zonePolicy;
220 
245  const char* const format;
246 
248  int8_t const offsetCode;
249 
267  uint8_t const deltaCode;
268 
272  int16_t const untilYear;
273 
275  uint8_t const untilMonth;
276 
282  uint8_t const untilDay;
283 
288  uint8_t const untilTimeCode;
289 
300  uint8_t const untilTimeModifier;
301 };
302 
307 template<typename S, typename ZC>
308 struct ZoneInfo {
310  const char* const name;
311 
317  uint32_t const zoneId;
318 
320  const ZC* const zoneContext;
321 
337  uint8_t const numEras;
338 
343  const ZoneEra<S>* const eras;
344 
346  const ZoneInfo* const targetInfo;
347 };
348 
349 }
350 }
351 
352 #endif
Metadata about the zone database.
Definition: ZoneInfoMid.h:41
static const uint8_t kSuffixU
Represents 'u' or UTC time.
Definition: ZoneInfoMid.h:75
int16_t const baseYear
Base year for tiny years.
Definition: ZoneInfoMid.h:90
int16_t const untilYearAccurate
Until year of accurate transitions.
Definition: ZoneInfoMid.h:87
const char *const tzVersion
TZ Database version which generated the zone info.
Definition: ZoneInfoMid.h:96
int16_t const startYear
Start year of the zone files as requested.
Definition: ZoneInfoMid.h:78
const char *const *const letters
Zone Rule letters list.
Definition: ZoneInfoMid.h:108
const char *const *const fragments
Zone Name fragment list.
Definition: ZoneInfoMid.h:102
static const int16_t kMaxUntilYear
The maximum value of untilYear.
Definition: ZoneInfoMid.h:48
static const int16_t kMinYear
The minimum value of fromYear and toYear.
Definition: ZoneInfoMid.h:66
int16_t const startYearAccurate
Start year of accurate transitions.
Definition: ZoneInfoMid.h:84
int16_t const maxTransitions
Max number of transitions required in TransitionStorage.
Definition: ZoneInfoMid.h:93
static const uint8_t kSuffixS
Represents 's' or standard time.
Definition: ZoneInfoMid.h:72
static const uint8_t kSuffixW
Represents 'w' or wall time.
Definition: ZoneInfoMid.h:69
static const int16_t kMaxYear
The maximum value fromYear and toYear.
Definition: ZoneInfoMid.h:56
uint8_t const numLetters
Number of fragments.
Definition: ZoneInfoMid.h:102
int16_t const untilYear
Until year of the zone files as requested.
Definition: ZoneInfoMid.h:81
uint8_t const numFragments
Number of fragments.
Definition: ZoneInfoMid.h:99
An entry in ZoneInfo which describes which ZonePolicy was being followed during a particular time per...
Definition: ZoneInfoMid.h:214
uint8_t const untilTimeModifier
The untilTimeModifier is a packed field containing 2 pieces of info:
Definition: ZoneInfoMid.h:300
uint8_t const untilMonth
The month field in UNTIL (1-12).
Definition: ZoneInfoMid.h:275
uint8_t const untilTimeCode
The time field of UNTIL field in 15-minute increments.
Definition: ZoneInfoMid.h:288
int16_t const untilYear
Era is valid until currentTime < untilYear.
Definition: ZoneInfoMid.h:272
uint8_t const deltaCode
This is a composite of two 4-bit fields:
Definition: ZoneInfoMid.h:267
const ZonePolicy< S > *const zonePolicy
Zone policy, determined by the RULES column.
Definition: ZoneInfoMid.h:219
const char *const format
Zone abbreviations (e.g.
Definition: ZoneInfoMid.h:245
int8_t const offsetCode
UTC offset in 15 min increments.
Definition: ZoneInfoMid.h:248
uint8_t const untilDay
The day field in UNTIL (1-31).
Definition: ZoneInfoMid.h:282
Representation of a given time zone, implemented as an array of ZoneEra records.
Definition: ZoneInfoMid.h:308
uint32_t const zoneId
Unique, stable ID of the zone name, created from a hash of the name.
Definition: ZoneInfoMid.h:317
const char *const name
Full name of zone (e.g.
Definition: ZoneInfoMid.h:310
const ZoneEra< S > *const eras
A const ZoneEras* pointer to numEras ZoneEra entries in increasing order of UNTIL time.
Definition: ZoneInfoMid.h:343
uint8_t const numEras
Number of ZoneEra entries.
Definition: ZoneInfoMid.h:337
const ZC *const zoneContext
ZoneContext metadata.
Definition: ZoneInfoMid.h:320
const ZoneInfo *const targetInfo
If Link, points to the target zone info.
Definition: ZoneInfoMid.h:346
A collection of transition rules which describe the DST rules of a given administrative region.
Definition: ZoneInfoMid.h:196
A time zone transition rule.
Definition: ZoneInfoMid.h:117
int16_t const toYear
TO year.
Definition: ZoneInfoMid.h:122
uint8_t const atTimeModifier
The atTimeModifier is a packed field containing 2 pieces of info:
Definition: ZoneInfoMid.h:160
uint8_t const onDayOfWeek
Determined by the ON column.
Definition: ZoneInfoMid.h:137
uint8_t const inMonth
Determined by the IN column.
Definition: ZoneInfoMid.h:125
uint8_t const deltaCode
Determined by the SAVE column and contains the offset from UTC, in 15-min increments.
Definition: ZoneInfoMid.h:172
uint8_t const letterIndex
Determined by the LETTER column.
Definition: ZoneInfoMid.h:186
uint8_t const atTimeCode
Determined by the AT column in units of 15-minutes from 00:00.
Definition: ZoneInfoMid.h:149
int8_t const onDayOfMonth
Determined by the ON column.
Definition: ZoneInfoMid.h:143
int16_t const fromYear
FROM year.
Definition: ZoneInfoMid.h:119