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"
119 return TimeZone(stdOffset, dstOffset);
175 const basic::ZoneInfo* zoneInfo,
180 (uintptr_t) zoneInfo,
194 const extended::ZoneInfo* zoneInfo,
199 (uintptr_t) zoneInfo,
231 mStdOffsetMinutes(0),
232 mDstOffsetMinutes(0) {}
275 return getBoundZoneProcessor()->
isLink();
292 return getBoundZoneProcessor()->
getZoneId();
311 abbrev = (mDstOffsetMinutes != 0) ?
"DST" :
"STD";
323 if (result.
type == FindResult::kTypeNotFound) {
349 abbrev = (mDstOffsetMinutes != 0) ?
"DST" :
"STD";
362 if (result.
type == FindResult::kTypeNotFound) {
397 if (result.
type == FindResult::kTypeNotFound) {
411 if (result.
type == FindResult::kTypeGap) {
444 if (result.
type == FindResult::kTypeNotFound) {
451 epochSeconds, offset, result.
fold);
461 return mStdOffsetMinutes == 0 && mDstOffsetMinutes == 0;
473 return mDstOffsetMinutes != 0;
482 mStdOffsetMinutes = stdOffset.
toMinutes();
491 mDstOffsetMinutes = dstOffset.
toMinutes();
505 d.type = TimeZoneData::kTypeError;
509 d.stdOffsetMinutes = mStdOffsetMinutes;
510 d.dstOffsetMinutes = mDstOffsetMinutes;
511 d.type = TimeZoneData::kTypeManual;
516 d.type = TimeZoneData::kTypeZoneId;
531 void printTo(Print& printer)
const;
574 mStdOffsetMinutes(stdOffset.toMinutes()),
575 mDstOffsetMinutes(dstOffset.toMinutes()) {}
593 ZoneProcessor* zoneProcessor
607 ZoneProcessor* getBoundZoneProcessor()
const {
621 int16_t mStdOffsetMinutes;
622 int16_t mDstOffsetMinutes;
648 inline bool operator==(
const TimeZone& a,
const TimeZone& b) {
649 if (a.mType != b.mType)
return false;
656 return a.mStdOffsetMinutes == b.mStdOffsetMinutes
657 && a.mDstOffsetMinutes == b.mDstOffsetMinutes;
660 return (a.mZoneKey == b.mZoneKey);
664 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,...
int16_t toMinutes() const
Return the time offset as minutes.
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 setDstOffset(TimeOffset dstOffset)
Sets the dstOffset of the TimeZone.
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.
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.
void setStdOffset(TimeOffset stdOffset)
Sets the stdOffset of the TimeZone.
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 TimeZone forMinutes(int8_t stdMinutes, int8_t dstMinutes=0)
Factory method to create from UTC minute offset and optional DST minute offset.
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.