6 #ifndef ACE_TIME_TIME_ZONE_H
7 #define ACE_TIME_TIME_ZONE_H
10 #include "TimeOffset.h"
11 #include "ZoneProcessor.h"
12 #include "BasicZoneProcessor.h"
13 #include "ExtendedZoneProcessor.h"
14 #include "TimeZoneData.h"
15 #include "ZonedExtra.h"
118 return TimeZone(stdOffset, dstOffset);
174 const basic::ZoneInfo* zoneInfo,
179 (uintptr_t) zoneInfo,
193 const extended::ZoneInfo* zoneInfo,
198 (uintptr_t) zoneInfo,
228 mStdOffsetMinutes(0),
229 mDstOffsetMinutes(0) {}
276 return getBoundZoneProcessor()->
isLink();
293 return getBoundZoneProcessor()->
getZoneId();
312 abbrev = (mDstOffsetMinutes != 0) ?
"DST" :
"STD";
324 if (result.
type == FindResult::kTypeNotFound) {
350 abbrev = (mDstOffsetMinutes != 0) ?
"DST" :
"STD";
363 if (result.
type == FindResult::kTypeNotFound) {
398 if (result.
type == FindResult::kTypeNotFound) {
412 if (result.
type == FindResult::kTypeGap) {
445 if (result.
type == FindResult::kTypeNotFound) {
452 epochSeconds, offset, result.
fold);
462 return mStdOffsetMinutes == 0 && mDstOffsetMinutes == 0;
474 return mDstOffsetMinutes != 0;
488 d.type = TimeZoneData::kTypeError;
492 d.stdOffsetMinutes = mStdOffsetMinutes;
493 d.dstOffsetMinutes = mDstOffsetMinutes;
494 d.type = TimeZoneData::kTypeManual;
499 d.type = TimeZoneData::kTypeZoneId;
514 void printTo(Print& printer)
const;
557 mStdOffsetMinutes(stdOffset.toMinutes()),
558 mDstOffsetMinutes(dstOffset.toMinutes()) {}
576 ZoneProcessor* zoneProcessor
590 ZoneProcessor* getBoundZoneProcessor()
const {
604 int16_t mStdOffsetMinutes;
605 int16_t mDstOffsetMinutes;
631 inline bool operator==(
const TimeZone& a,
const TimeZone& b) {
632 if (a.mType != b.mType)
return false;
639 return a.mStdOffsetMinutes == b.mStdOffsetMinutes
640 && a.mDstOffsetMinutes == b.mDstOffsetMinutes;
643 return (a.mZoneKey == b.mZoneKey);
647 inline bool operator!=(
const TimeZone& a,
const TimeZone& b) {
A specific implementation of BasicZoneProcessorTemplate that uses ZoneXxxBrokers which read from zone...
A specific implementation of ExtendedZoneProcessorTemplate that uses ZoneXxxBrokers which read from z...
Result of a search for transition at a specific epochSeconds or a specific LocalDateTime.
uint8_t fold
For findByLocalDateTime(), when type==kTypeOverlap, this is a copy of the requested LocalDateTime::fo...
int16_t dstOffsetMinutes
DST offset of the resulting OffsetDateTime.
int16_t reqStdOffsetMinutes
STD offset of the Transition which matched the epochSeconds requested by findByEpochSeconds(),...
int16_t stdOffsetMinutes
STD offset of the resulting OffsetDateTime.
int16_t reqDstOffsetMinutes
DST offset of the Transition which matched the epochSeconds requested by findByEpochSeconds(),...
const char * abbrev
Pointer to the abbreviation stored in the transient Transition::abbrev variable.
uint8_t type
Result of the findByEpochSeconds() or findByLocalDateTime() search methods.
Class that holds the date-time as the components (year, month, day, hour, minute, second) without reg...
The date (year, month, day), time (hour, minute, second) and fixed offset from UTC (timeOffset).
static OffsetDateTime forLocalDateTimeAndOffset(const LocalDateTime &localDateTime, TimeOffset timeOffset)
Factory method from LocalDateTime and TimeOffset.
acetime_t toEpochSeconds() const
Return seconds since AceTime epoch taking into account the UTC offset.
static OffsetDateTime forError()
Factory method that returns an instance whose isError() is true.
uint8_t fold() const
Return the fold.
static OffsetDateTime forEpochSeconds(acetime_t epochSeconds, TimeOffset timeOffset, uint8_t fold=0)
Factory method.
A thin wrapper that represents a time offset from a reference point, usually 00:00 at UTC,...
static TimeOffset forHours(int8_t hours)
Create TimeOffset with the corresponding hour offset.
static TimeOffset forHourMinute(int8_t hour, int8_t minute)
Create TimeOffset from (hour, minute) offset.
static TimeOffset forMinutes(int16_t minutes)
Create TimeOffset from minutes from 00:00.
Class that describes a time zone.
ZonedExtra getZonedExtra(acetime_t epochSeconds) const
Return the ZonedExtra information at epochSeconds.
static TimeZone forZoneInfo(const extended::ZoneInfo *zoneInfo, ExtendedZoneProcessor *zoneProcessor)
Convenience factory method to create from a zoneInfo and an associated ExtendedZoneProcessor.
void printTo(Print &printer) const
Print the text representation of the time zone using the full canonical time zone name or UTC offset ...
uint32_t getZoneId() const
Return the zoneId for kTypeBasic, kTypeExtended.
ZoneProcessor * mZoneProcessor
An instance of a ZoneProcessor, for example, BasicZoneProcessor or ExtendedZoneProcessor.
void printTargetNameTo(Print &printer) const
Print the name of the target zone if the current time zone is a Link.
OffsetDateTime getOffsetDateTime(const LocalDateTime &ldt) const
Return the best estimate of the OffsetDateTime at the given LocalDateTime for the current TimeZone.
OffsetDateTime getOffsetDateTime(acetime_t epochSeconds) const
Return the best estimate of the OffsetDateTime at the given epochSeconds.
bool isUtc() const
Return true if UTC (+00:00+00:00).
static TimeZone forUtc()
Factory method to create a UTC TimeZone.
static TimeZone forHours(int8_t stdHours, int8_t dstHours=0)
Factory method to create from UTC hour offset and optional DST hour offset.
void resetZoneProcessor()
Reset the underlying ZoneProcessor if a ZoneProcessor is used.
uint8_t getType() const
Return the type of TimeZone, used to determine the behavior of certain methods at runtime.
bool isLink() const
Return true if timezone is a Link entry pointing to a Zone entry.
uintptr_t mZoneKey
An opaque zone key.
static TimeZone forMinutes(int16_t stdMinutes, int16_t dstMinutes=0)
Factory method to create from UTC minute offset and optional DST minute offset.
void printShortTo(Print &printer) const
Print the short human readable representation of the time zone.
static const uint8_t kTypeError
A TimeZone that represents an invalid condition.
static TimeZone forError()
Return a TimeZone representing an error condition.
static TimeZone forZoneKey(uintptr_t zoneKey, ZoneProcessor *processor)
Factory method to create from a generic zoneKey and a generic zoneProcessor.
TimeOffset getDstOffset() const
Return the DST TimeOffset.
bool isError() const
Return true if TimeZone is an error.
static TimeZone forZoneInfo(const basic::ZoneInfo *zoneInfo, BasicZoneProcessor *zoneProcessor)
Convenience factory method to create from a zoneInfo and an associated BasicZoneProcessor.
bool isDst() const
Return if mDstOffsetMinutes is not zero.
static TimeZone forTimeOffset(TimeOffset stdOffset, TimeOffset dstOffset=TimeOffset())
Factory method to create from a UTC offset and an optional DST offset.
static const uint8_t kTypeReserved
Reserved for future use.
ZonedExtra getZonedExtra(const LocalDateTime &ldt) const
Return the ZonedExtra information at epochSeconds.
static TimeZone forHourMinute(int8_t stdHour, int8_t stdMinute, int8_t dstHour=0, int8_t dstMinute=0)
Factory method to create from UTC (hour, minute) pair and optional DST (hour, minute) pair.
TimeZoneData toTimeZoneData() const
Convert to a TimeZoneData object, which can be fed back into ZoneManager::createForTimeZoneData() to ...
TimeOffset getStdOffset() const
Return the Standard TimeOffset.
static const uint8_t kTypeManual
Manual STD offset and DST offset.
TimeZone()
Default constructor creates a UTC TimeZone.
Base interface for ZoneProcessor classes.
uint8_t getType() const
Return the kTypeXxx of the current instance.
virtual FindResult findByEpochSeconds(acetime_t epochSeconds) const =0
Return the search results at given epochSeconds.
virtual uint32_t getZoneId() const =0
Return the unique stable zoneId.
virtual FindResult findByLocalDateTime(const LocalDateTime &ldt) const =0
Return the search results at given LocalDateTime.
virtual bool isLink() const =0
Return true if timezone is a Link entry pointing to a Zone entry.
void resetTransitionCache()
Reset the internal transition cache.
virtual void setZoneKey(uintptr_t zoneKey)=0
Set the opaque zoneKey of this object to a new value, reseting any internally cached information.
int32_t acetime_t
Type for the number of seconds from epoch.
Data structure that captures the internal state of a TimeZone object with enough information so that ...
uint32_t zoneId
Both TimeZone::kTypeBasic and TimeZone::kTypeExtended are mapped to a TimeZoneData::kTypeZoneId.