AceTime  2.3.0
Date and time classes for Arduino that support timezones from the TZ Database.
Public Attributes | List of all members
ace_time::zoneinfohigh::ZoneEra< S > Struct Template Reference

An entry in ZoneInfo which describes which ZonePolicy was being followed during a particular time period. More...

#include <ZoneInfoHigh.h>

Public Attributes

const ZonePolicy< S > *const zonePolicy
 Zone policy, determined by the RULES column. More...
 
const char *const format
 Zone abbreviations (e.g. More...
 
int16_t const offsetCode
 UTC offset in 15-second increments. More...
 
uint8_t const offsetRemainder
 The remainder seconds from offsetCode.
 
int8_t const deltaMinutes
 If zonePolicy is nullptr, this is the DST offset in minutes as defined by the RULES column in 'hh:mm' format. More...
 
int16_t const untilYear
 Era is valid until currentTime < untilYear. More...
 
uint8_t const untilMonth
 The month field in UNTIL (1-12). More...
 
uint8_t const untilDay
 The day field in UNTIL (1-31). More...
 
uint16_t const untilTimeCode
 The time field of UNTIL field in 15-second increments. More...
 
uint8_t const untilTimeModifier
 The untilTimeModifier is a packed field containing 2 pieces of info: More...
 

Detailed Description

template<typename S>
struct ace_time::zoneinfohigh::ZoneEra< S >

An entry in ZoneInfo which describes which ZonePolicy was being followed during a particular time period.

Corresponds to one line of the ZONE record in the TZ Database file ending with an UNTIL field. The ZonePolicy is determined by the RULES column in the TZ Database file.

There are 2 types of ZoneEra: 1) zonePolicy == nullptr. Then deltaCode determines the additional offset from offsetCode. A value of '-' in the TZ Database file is stored as 0. 2) zonePolicy != nullptr. Then the deltaCode offset is given by the ZoneRule.deltaCode which matches the time instant of interest.

Definition at line 187 of file ZoneInfoHigh.h.

Member Data Documentation

◆ deltaMinutes

template<typename S >
int8_t const ace_time::zoneinfohigh::ZoneEra< S >::deltaMinutes

If zonePolicy is nullptr, this is the DST offset in minutes as defined by the RULES column in 'hh:mm' format.

An 8-bit integer can handle DST offsets of [-128,127] minutes which allows it to handle DST offsets of [-02:00,02:00].

Definition at line 236 of file ZoneInfoHigh.h.

◆ format

template<typename S >
const char* const ace_time::zoneinfohigh::ZoneEra< S >::format

Zone abbreviations (e.g.

PST, EST) determined by the FORMAT column. It has 3 encodings in the TZ DB files:

1) A fixed string, e.g. "GMT". 2) Two strings separated by a '/', e.g. "-03/-02" indicating "{std}/{dst}" options. 3) A single string with a substitution, e.g. "E%sT", where the "%s" is replaced by the LETTER value from the ZoneRule.

BasicZoneProcessor supports only a single letter subsitution from LETTER, but ExtendedZoneProcessor supports substituting multi-character strings (e.g. "CAT", "DD", "+00").

The TZ DB files use 's' to indicate the substitution, but for simplicity, AceTime replaces the "%s" with just a '' character with no loss of functionality. This also makes the string-replacement code a little simpler. For example, 'EsT' is stored as 'ET', and the LETTER substitution is performed on the '' character.

This field will never be a 'nullptr' if it was derived from an actual entry from the TZ dtabase. There is an internal object named ExtendedZoneProcessor::kAnchorEra which does set this field to nullptr. Maybe it should be set to ""?

Definition at line 219 of file ZoneInfoHigh.h.

◆ offsetCode

template<typename S >
int16_t const ace_time::zoneinfohigh::ZoneEra< S >::offsetCode

UTC offset in 15-second increments.

Determined by the STDOFF column. The remainder goes into the offsetsRemainder field.

Definition at line 225 of file ZoneInfoHigh.h.

◆ untilDay

template<typename S >
uint8_t const ace_time::zoneinfohigh::ZoneEra< S >::untilDay

The day field in UNTIL (1-31).

Will never be 0. Also, there's no need for untilDayOfWeek, because the database generator will resolve the exact day of month based on the known year and month.

Definition at line 251 of file ZoneInfoHigh.h.

◆ untilMonth

template<typename S >
uint8_t const ace_time::zoneinfohigh::ZoneEra< S >::untilMonth

The month field in UNTIL (1-12).

Will never be 0.

Definition at line 244 of file ZoneInfoHigh.h.

◆ untilTimeCode

template<typename S >
uint16_t const ace_time::zoneinfohigh::ZoneEra< S >::untilTimeCode

The time field of UNTIL field in 15-second increments.

A range is [0,6000] corresponds to [0h,25h].

Definition at line 257 of file ZoneInfoHigh.h.

◆ untilTimeModifier

template<typename S >
uint8_t const ace_time::zoneinfohigh::ZoneEra< S >::untilTimeModifier

The untilTimeModifier is a packed field containing 2 pieces of info:

  • The upper 4 bits represent the UNTIL time suffix: 'w', 's' or 'u', represented by kSuffixW, kSuffixS and kSuffixU.
  • The lower 4 bits represent the remaining 0-14 seconds of the UNTIL field after truncation into untilTimeCode. In other words, the full UNTIL field in one-second resolution is (15 * untilTimeCode + (untilTimeModifier & 0x0f)).

Definition at line 269 of file ZoneInfoHigh.h.

◆ untilYear

template<typename S >
int16_t const ace_time::zoneinfohigh::ZoneEra< S >::untilYear

Era is valid until currentTime < untilYear.

Comes from the UNTIL column.

Definition at line 241 of file ZoneInfoHigh.h.

◆ zonePolicy

template<typename S >
const ZonePolicy<S>* const ace_time::zoneinfohigh::ZoneEra< S >::zonePolicy

Zone policy, determined by the RULES column.

Set to nullptr if the RULES column is '-' or an explicit DST shift in the form of 'hh:mm'.

Definition at line 192 of file ZoneInfoHigh.h.


The documentation for this struct was generated from the following file: