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"
118 return TimeZone(stdOffset, dstOffset);
174 const basic::ZoneInfo* zoneInfo,
179 (uintptr_t) zoneInfo,
193 const extended::ZoneInfo* zoneInfo,
198 (uintptr_t) zoneInfo,
223 mStdOffsetMinutes(0),
224 mDstOffsetMinutes(0) {}
254 return getBoundZoneProcessor()->
isLink();
275 return getBoundZoneProcessor()->
getZoneId(followLink);
295 return getBoundZoneProcessor()->
getUtcOffset(epochSeconds);
347 return (mDstOffsetMinutes != 0) ?
"DST" :
"STD";
351 return getBoundZoneProcessor()->
getAbbrev(epochSeconds);
409 return mStdOffsetMinutes == 0 && mDstOffsetMinutes == 0;
421 return mDstOffsetMinutes != 0;
430 mStdOffsetMinutes = stdOffset.
toMinutes();
439 mDstOffsetMinutes = dstOffset.
toMinutes();
453 d.type = TimeZoneData::kTypeError;
457 d.stdOffsetMinutes = mStdOffsetMinutes;
458 d.dstOffsetMinutes = mDstOffsetMinutes;
459 d.type = TimeZoneData::kTypeManual;
464 d.type = TimeZoneData::kTypeZoneId;
479 void printTo(Print& printer,
bool followLink =
false)
const;
499 void printShortTo(Print& printer,
bool followLink =
false)
const;
516 mStdOffsetMinutes(stdOffset.toMinutes()),
517 mDstOffsetMinutes(dstOffset.toMinutes()) {}
527 ZoneProcessor* zoneProcessor
541 ZoneProcessor* getBoundZoneProcessor()
const {
555 int16_t mStdOffsetMinutes;
556 int16_t mDstOffsetMinutes;
582 inline bool operator==(
const TimeZone& a,
const TimeZone& b) {
583 if (a.mType != b.mType)
return false;
590 return a.mStdOffsetMinutes == b.mStdOffsetMinutes
591 && a.mDstOffsetMinutes == b.mDstOffsetMinutes;
594 return (a.mZoneKey == b.mZoneKey);
598 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...
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 offset from UTC (timeOffset).
static OffsetDateTime forLocalDateTimeAndOffset(const LocalDateTime &localDateTime, TimeOffset timeOffset)
Factory method from LocalDateTime and TimeOffset.
static OffsetDateTime forError()
Factory method that returns an instance whose isError() is true.
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 forError()
Return an error indicator.
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.
TimeOffset getDeltaOffset(acetime_t epochSeconds) const
Return the DST offset from standard UTC offset at epochSeconds.
static TimeZone forZoneInfo(const extended::ZoneInfo *zoneInfo, ExtendedZoneProcessor *zoneProcessor)
Convenience factory method to create from a zoneInfo and an associated ExtendedZoneProcessor.
ZoneProcessor * mZoneProcessor
An instance of a ZoneProcessor, for example, BasicZoneProcessor or ExtendedZoneProcessor.
const char * getAbbrev(acetime_t epochSeconds) const
Return the time zone abbreviation at the given epochSeconds.
void setDstOffset(TimeOffset dstOffset)
Sets the dstOffset of the TimeZone.
OffsetDateTime getOffsetDateTime(const LocalDateTime &ldt) const
Return the best estimate of the OffsetDateTime at the given LocalDateTime for the current TimeZone.
TimeZoneData toTimeZoneData(bool followLink=false) const
Convert to a TimeZoneData object, which can be fed back into ZoneManager::createForTimeZoneData() to ...
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.
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.
TimeOffset getUtcOffset(acetime_t epochSeconds) const
Return the total UTC offset at epochSeconds, including DST offset.
uintptr_t mZoneKey
An opaque zone key.
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.
void printShortTo(Print &printer, bool followLink=false) const
Print the short human readable representation of the time zone.
uint32_t getZoneId(bool followLink=false) const
Return the zoneId for kTypeBasic, kTypeExtended.
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.
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.
void printTo(Print &printer, bool followLink=false) const
Print the text representation of the time zone using the full canonical time zone name or UTC offset ...
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 TimeOffset getUtcOffset(acetime_t epochSeconds) const =0
Return the total UTC offset at epochSeconds, including DST offset.
virtual const char * getAbbrev(acetime_t epochSeconds) const =0
Return the time zone abbreviation at epochSeconds.
virtual OffsetDateTime getOffsetDateTime(const LocalDateTime &ldt) const =0
Return the best estimate of the OffsetDateTime at the given LocalDateTime for the timezone of the cur...
virtual bool isLink() const =0
Return true if timezone is a Link entry pointing to a Zone entry.
virtual TimeOffset getDeltaOffset(acetime_t epochSeconds) const =0
Return the DST delta offset at epochSeconds.
virtual uint32_t getZoneId(bool followLink=false) const =0
Return the unique stable zoneId.
virtual void setZoneKey(uintptr_t zoneKey)=0
Set the opaque zoneKey of this object to a new value, reseting any internally cached information.
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.