AceTime

Date and time classes for Arduino supporting the IANA TZ Database time zones to convert epoch seconds to date and time components in different time zones.

MIT License

Stars
77
AceTime - 2.3.1 - upgrade to TZDB 2023d Latest Release

Published by bxparks 10 months ago

  • 2.3.1 (2024-01-12, TZDB version 2023d)
    • Upgrade TZDB to 2023d
      • https://mm.icann.org/pipermail/tz-announce/2023-December/000080.html
      • "Ittoqqortoormiit, Greenland changes time zones on 2024-03-31. Vostok,
        Antarctica changed time zones on 2023-12-18. Casey, Antarctica changed
        time zones five times since 2020. Code and data fixes for Palestine
        timestamps starting in 2072. A new data file zonenow.tab for
        timestamps starting now."

Major Changes in v2.3: Add CompleteZoneProcessor, CompleteZoneManager,
and the zonedbc database to support all timezones, for all transitions defined
in the IANA TZ database ([1844,2087]), and extending the validity of timezone
calculations from [2000,10000) to [0001,10000).

Migration: MIGRATING.md

Changelog

  • 2.3.0 (2023-06-27, TZDB version 2023c)
    • Create CustomZoneRegistry example
      to illustrate how to use a custom registry.
    • Update BasicZoneManager to detect gaps.
      • Allows AceTimeValidation/validation tests to pass.
      • Still not able to distinguish between exact and overlap though.
    • Allow multi-character ZoneRule.letter in BasicZoneProcessor.
      • Regenerate zonedb which enables 2 more zones: /Africa/Windhoek,
        and America/Belize
      • Increases zonedb by 150-200 bytes.
    • Rename BrokerFactory to ZoneInfoStore for better self-documentation.
      • This is an internal implementation detail. Downstream clients should
        not be affected.
    • ZoneContext
      • Move ZoneContext, letters[], fragments[] into PROGMEM.
      • Move zonedbXxx::kTzDatabaseVersion string into PROGMEM, and change
        type to const __FlashString*.
      • Create ZoneContextBroker around ZoneContext, for consistency
        with all other zoneinfo data structures. Merge ZoneContext.h into
        ZoneInfo.h.
      • Add startYearAccurate and untilYearAccurate to ZoneContext which
        define the interval of accurate transitions.
      • Saves around 150-200 bytes of RAM on AVR processors,
        200-350 bytes of RAM on ESP8266.
    • Cleanly separate zoneinfo storage classes from their brokers classes.
      • Three storage implementations instead of one: zoneinfolow,
        zoneinfomid, zoneinfohigh, supporting low, middle, and high time
        resolutions.
      • zoneinfohigh was created to support CompleteZoneProcessor,
        CompleteZoneManager and the zonedbc database.
      • zoneinfomid initially used in ExtendedZoneProcessor, but now
        unused.
      • Merge zoneinfo/ZonePolicy.h into zoneinfo/ZoneInfo.h.
      • Convert structs in zoneinfo/ZoneInfo.inc into templates, with
        synthetic typename S selector. Merge ZoneInfo.inc into
        ZoneInfo.h.
    • Support timezones before 1972 using CompleteZoneManager,
      CompleteZoneProcessor, and zonedbc database
      • Before standardizing on UTC around 1970, many timezones had local
        times offsets from UTC which require one-second resolution instead of
        one-minute resolution. This requires changing many internal variables
        from int16_t to int32_t.
      • Change TimeOffset to support one-second resolution using int32_t.
      • Rename BasicZone::stdOffseMinutes() to BasicZone::stdOffset()
        which returns a TimeOffset object.
      • Rename ExtendedZone::stdOffseMinutes() to
        ExtendedZone::stdOffset() which returns a TimeOffset object.
      • Leave BasicZoneProcessor using one-minute resolution because its
        algorithm has an inherent limitations which cannot handle many
        timezones before 1972, so no need to convert int16_t to int32_t
        fields.
      • Add CompleteZoneManager, CompleteZoneProcessor,
        CompleteZoneProcessorCache, CompleteZone
      • Add zonedbc database which is valid from [1800,10000), which
        includes all transitions in the TZDB since the first transition is
        1844.
      • Add scope=complete to access the zonedbc database.
    • Zone Processor with graceful degradation
      • Remove range checks against ZoneContext.startYear() and
        ZoneContext.untilYear()
      • Replace with LocalDate::kMinYear and LocalDate::kMaxYear, mostly
        for formatting reasons (prevent negative
        years, and years with more than 4 digits).
      • The zone processors will always return something reasonble across the
        entire int16_t range.
      • Only the accuracy suffers outside of the startYearAccurate() and
        untilYearAccurate() limits.
      • Along with v2.2 which always generates anchor rules for all zone
        policies, the startYearAccureate() and untilYearAccurate() allows
        for graceful degradation of classes like ZonedDateTime for years
        outside of this accuracy range.
    • Rename src/tzonedb* directories
      • to src/zonedb*testing for consistency with other acetime libraries
  • 2.2.3 (2023-05-31, TZDB version 2023c)
    • Update ace_time/testing/* classes to support splitting the test data
      into 2 separate lists: transitions and samples.
      • Required to support new validation_data.json from AceTimeValidation.
    • Update AceTimeValidation test names to tests/Xxx{Basic,Extended}Test.
    • Add ZonedExtra::kAbbrevSize to define the char buffer size needed to
      hold an abbreviation.
    • Change ZonedExtra::kInvalidMinutes from public to private.
      • This is an implementation detail.
      • Use ZonedExtra::isError() instead.
    • Rename AceTimePython to acetimepy.
    • ZoneProcessor transition cache
      • Save the epoch year, and automatically invalidate and regenerate the
        cache when the Epoch::currentEpochYear() is modified.
      • Remove cache invalidation methods which are no longer needed:
        • ZoneProcessor::resetTransitionCache()
        • ZoneProcessorCache::resetZoneProcessors()
        • ZoneManager::resetZoneProcessors()
    • Rename "Converter Epoch" to "Internal Epoch".
      • Change daysToCurrentEpochFromConverterEpoch() to
        daysToCurrentEpochFromInternalEpoch().
      • This is an internal implementation detail, exposed only for testing
        purposes.
    • Update supported boards and tiers
      • Add SAMD21 and SAMD51 boards to Tier 1
        • Add Adafruit ItsyBitsy M4 (SAMD51 120MHz ARM Cortex-M4)
        • SAMD21 and SAMD51 boards are back in Tier 1, as long as they use
          the traditional Arduino API instead of the new
          Arduino-Core.
        • Fortunately most third party SAMD21 and SAMD51 boards continue to
          use the traditional Arduino API.
      • Move Teensy 3.2 to Tier 2
        • This board is entering end-of-life.
        • As well, the Teensyduino environment integrates with the Arduino
          IDE and CLI in a way that's different than all other third-party
          Arduino boards. Some of my automation scripts do not work with
          Teensyduino, so it becomes very time consuming to test the Teensy
          boards.
        • All Teensy boards are now in Tier 2 ("Should work but not tested
          often").
AceTime - 2.2.2 - upgrade to TZDB 2023c

Published by bxparks over 1 year ago

  • 2.2.2 (2023-04-01, TZDB version 2023c)
    • Upgrade TZDB from 2023b to 2023c.
      • https://mm.icann.org/pipermail/tz-announce/2023-March/000079.html
        • "This release's code and data are identical to 2023a. In other
          words, this release reverts all changes made in 2023b other than
          commentary, as that appears to be the best of a bad set of
          short-notice choices for modeling this week's daylight saving
          chaos in Lebanon."
    • AceTime is forced to upgrade to 2023c, because we skipped 2023a and went
      directly to 2023b, which is being rolled back by 2023c.
AceTime - 2.2.1 - upgrade to TZDB 2023b; immutable TimeZone; support SAMD21 again

Published by bxparks over 1 year ago

  • 2.2.1 (2023-03-24, TZDB version 2023b)
    • Actually regenerate the zonedb* files to 2023b.
  • 2.2.0 (2023-03-24, TZDB version 2023b)
    • Upgrade TZDB from 2022g to 2023b
    • Bug Fix
      • Change arguments for TimeZone::forMinutes() from uint8_t to
        uint16_t.
    • Breaking Change
      • Make TimeZone effectively immutable, by removing setStdOffset()
        and setDstOffset() methods.
      • Client applications should create a new TimeZone object using
        TimeZone::forTimeOffset(std, dst) and overwrite the old one.
      • See Migrating to v2.2.
    • Add support for Seeed Studio XIAO M0 (SAMD21).
      • Required updating zoneino/compat.h to clobber the broken definition
        of FPSTR() in Seeeduino 1.8.3.
    • Simplify the handling of Rule.LETTER.
      • Encode all letters as an index into ZoneContext.letters array, not
        just LETTER which are only a single character.
      • On 8-bit AVR:
        • Increases BasicZoneProcessor by ~200 bytes when 1-2 zones are
          used. But flash remains the same when the full TZ database is
          used.
        • No change to ExtendedZoneProcessor for 1-2 zones. But decreases
          flash usage by ~300 bytes when the full TZ database is used.
      • The small increase in flash is worth it because this greatly
        simplifies the complicated code surrounding LETTER that was difficult
        to understand and maintain.
    • Unify Basic and Extended zoneinfo encoding.
      • Change encoding of basic::ZoneRule.deltaCode,
        basic::ZoneEra.deltaCode, and basic::ZoneEra.offsetCode to be
        identical their counterparts in extended::ZoneXxx.
      • Merge BasicBrokers.h and ExtendedBrokers.h into just Brokers.h.
    • Restructure zonedb directories
      • Lift ace_time/internal/testing/tzonedb[x] database files
        to ace_time/tzonedb[x].
      • Lift ace_time/zonedb[x] database files to ace_time/zonedb[x].
      • These changes are transparent to client apps because the C++
        namespaces of these files are unchanged.
      • Lift ace_time/internal/Zone*.h files into new src/zoneinfo/
        directory. These are the classes that describe the *zonedb*
        databases.
    • Add ZonedDateTime::offsetDateTime()
      • Returns the underlying OffsetDateTime inside the ZonedDateTime.
      • Analogous to ZonedDateTime::localDateTime().
    • Always generate anchor rules in zonedb.
      • Allows ExtendedZoneProcessor to work over all years [0,10000)
        even with truncated zonedb (e.g. [2000,2100)).
      • Accuracy is guaranteed only for the requested interval (e.g.
        [2000,2100).
      • But the code won't crash outside of that interval.
  • 2.1.1 (2023-02-02, TZDB version 2022g)
    • ZonedExtra
      • Add ZonedExtra::forComponents() factory method, for consistency with
        ZonedDateTime class.
    • examples/AutoBenchmark
      • Add ZonedExtra benchmarks.
    • README.md
      • Update AceTimeValidation validation years to [2000,2100).
      • Update memory and cpu benchmarks.
AceTime - v2.1.0 - unified links; simplify TimeZone using ZonedExtra class

Published by bxparks over 1 year ago

  • 2.1.0 (2023-01-29, TZDB version 2022g)
    • There are a handful API breaking changes in this release in the pursuit of
      simpler and cleaner code. See the following for more info:
    • Potentially Breaking: zonedb,zonedbx
      • Rename kPolicyXxx to kZonePolicyXxx for consistency. These are
        expected to be used only internally, so shouldn't cause external
        breakage.
    • Breaking: TimeZone.h
      • Replace 3 separate extraction methods in TimeZone with a new
        ZonedExtra class
      • Removed: TimeZone::getUtcOffset()
        • Replaced by: ZonedExtra::timeOffset()
      • Removed: TimeZone::getDeltaOffset()
        • Replaced by: ZonedExtra::dstOffset()
      • Removed TimeZone::getAbbrev()
        • Replaced by: ZonedExtra::abbrev()
        • ZonedExtra::abbrev() returns pointer to a local string buffer
          instead of a transient buffer deep inside Transition object.
        • TimeZone becomes closer to being thread-safe
    • New Class: ZonedExtra.h
      • ZonedExtra::forEpochSeconds(epochSeconds, tz)
        • Create instance from epochSeconds and time zone.
      • ZonedExtra::forLocalDateTime(ldt, tz)
        • Create instance from LocalDateTime and time zone.
    • Potentially Breaking: Unified Links
      • Links are now first-class citizens, exactly the same as Zones.
      • Unify "fat links" and "symbolic links" into a single implementation.
      • Remove "thin links" to simplify the code.
      • TimeZone class simplified
        • Removed followLink flag on various methods.
        • Only 2 methods apply to Links: isLink() and
          printTargetNameTo().
    • Simplify ZoneProcessors
      • ZoneProcessor.h, ExtendedZoneProcessor.h, BasicZoneProcessor.h
      • Remove: getUtcOffset(), getDeltaOffset(), getAbbrev()
      • Replaced by: findByLocalDateTime(), findByEpochSeconds()
      • These are internal helper methods not intended for public consumption.
    • Unit tests
      • Migrate most unit tests to use the smaller, testing zone databases at
        testing/tzonedb/ and testing/tzonedbx/.
        • Reduces maintenance cost of various hand-crafted ZoneInfo and
          ZonePolicy entries for unit tests.
        • Can test against real timezones with predictable behavior.
  • 2.0.1 (2022-12-04, TZDB 2022g)
    • Prevent ExtendedZoneProcssor::generateStartUntilTimes() from
      dereferencing uninitialized memory if there are no matching transitions.
      • This may happen if zonedbx is accidentally corrupted (e.g. by using
        one with int8 year fields instead of int16 year fields).
    • Incorporate notable zone_policies.h comments into notable
      zone_infos.h.
    • Upgrade TZDB from 2022f to 2022g
      • https://mm.icann.org/pipermail/tz-announce/2022-November/000076.html
        • The northern edge of Chihuahua changes to US timekeeping.
        • Much of Greenland stops changing clocks after March 2023.
        • Fix some pre-1996 timestamps in northern Canada.
        • C89 is now deprecated; please use C99 or later.
        • Portability fixes for AIX, libintl, MS-Windows, musl, z/OS
        • In C code, use more C23 features if available.
        • C23 timegm now supported by default
        • Fixes for unlikely integer overflows
  • 2.0 (2022-11-04, TZDB 2022f) Breaking Change See
    Migrating to 2.0.0
    • Change internal storage type of year component from int8_t to
      int16_t, extending the range of valid years from [-1873,2127] to
      [1,9999].
      • Remove yearTiny() getters and setters from LocalDate,
        LocalDateTime, OffsetDateTime, and ZonedDateTime.
        • They were not documented except in doxygen docs.
      • Remove from LocalDate:
        • kInvalidYearTiny, replaced with kInvalidYear
        • kMinYearTiny, replaced with kMinYear
        • kMaxYearTiny, replaced with kMaxYear
        • forTinyComponents()
      • Remove from LocalDateTime
        • forTinyComponents()
      • Update AceTimeTools
        to generate src/zonedb and src/zonedbx using int16_t year types.
    • Extend untilYear of zonedb and
      zonedbx databases to 10000
      • databases now valid over the years [2000,10000)
      • zonedbx adds 75 additional Rules for kPolicyMorocco (e.g.
        zone "Africe/Casablanca") due to the precalculated DST shifts which
        are listed in the IANA TZ DB up to the year 2087.
      • zonedb remains unchanged
    • Change epoch seconds conversion algorithm
      • Extract different epoch date conversion algorithms to be used/tested.
        Two of them are EpochConverterJulian and EpochConverterHinnant
      • Migrate LocalDate to use the EpochConverterHinnant instead of
        EpochConverterJulian.
        • The primary reason is that I am able to fully understand the
          algorithms described in EpochConverterHinnant.
        • In contrast, I have almost no understanding of the algorithms
          implemented by EpochConverterJulian.
    • Configurable epoch year using new Epoch utility class
      • Add Epoch::currentEpochYear() which allows customization of the
        internal epoch year at startup.
        • Expected to be rarely used in user applications, but somewhat
          common in unit testing.
      • Add Epoch::epochValidYearLower() and Epoch::epochValidYearUpper()
        • Defines the 100-year interval which is +/- 50 years from the
          currentEpochYear() where the epoch seconds and time zone
          transition algorithms are guaranteed to be valid.
      • Add cache invalidation methods which must be called if
        currentEpochYear() is changed at runtime.
        • ZoneProcessor::resetTransitionCache()
        • ZoneProcessorCache::resetZoneProcessors()
        • ZoneManager::resetZoneProcessors()
    • Remove toUnixSeconds() and forUnixSeconds() which use the 32-bit
      versions of unix epoch seconds.
      • They will become invalid in the year 2038, and it's now the year 2022
        so it does not seem worth maintaining these.
      • The 64-bit versions toUnixSeconds64() and forUnixSeconds64() are
        retained.
    • Flash usage increases (see MemoryBenchmark for
      more details:
      • AVR:
        • BasicZoneManager increases ~200 bytes
        • ExtendedZoneManager increases ~500 bytes
        • zonedb increases ~1.5 kiB
        • zonedbx increases ~3 kiB
      • ESP8266
        • BasicZoneManager increases ~50 bytes
        • ExtendedZoneManager increases ~150 bytes
        • zonedb increases ~300 bytes
        • zonedbx increases ~1.5 kiB
AceTime - 1.11.7 - upgrade to TZDB 2022f

Published by bxparks almost 2 years ago

  • 1.11.7 (2022-11-02, TZDB 2022f)
    • Upgrade TZDB from 2022e to 2022f
      • https://mm.icann.org/pipermail/tz-announce/2022-October/000075.html
        * Mexico will no longer observe DST except near the US border.
        * Chihuahua moves to year-round -06 on 2022-10-30.
        * Fiji no longer observes DST.
        * Move links to 'backward'.
        * In vanguard form, GMT is now a Zone and Etc/GMT a link.
        * zic now supports links to links, and vanguard form uses this.
        * Simplify four Ontario zones.
        * Fix a Y2438 bug when reading TZif data.
        * Enable 64-bit time_t on 32-bit glibc platforms.
        * Omit large-file support when no longer needed.
        * In C code, use some C23 features if available.
        * Remove no-longer-needed workaround for Qt bug 53071.
AceTime - v1.11.6 - upgrade to TZDB 2022e

Published by bxparks about 2 years ago

  • 1.11.6 (2022-10-22, TZDB 2022e)
    • Upgrade TZDB from 2022d to 2022e
      • https://mm.icann.org/pipermail/tz-announce/2022-October/000074.html
        • Jordan and Syria switch from +02/+03 with DST to year-round +03.
      • BasicZoneProcessor can no longer support Asia/Amman (Jordan) and
        Asia/Damascus because the transition to permanent +03 occurs
        at an instant which cannot be handled by the simple algorithm in
        BasicZoneProcessor. Use ExtendedZoneProcessor instead.
AceTime - v1.11.5 - upgrade to TZDB 2022d

Published by bxparks about 2 years ago

AceTime - v1.11.4 - upgrade to TZDB 2022b; add daysUntil() utility function

Published by bxparks about 2 years ago

  • 1.11.4 (2022-08-13, TZDB 2022b)
    • Add ace_time::daysUntil(localDate, month, day) utility function that
      returns the number of days until the next (month, day) date. Useful for
      calculating the number of days until the next Christmas for example.
    • Upgrade to TZDB 2022b.
      • https://mm.icann.org/pipermail/tz-announce/2022-August/000071.html
        • Chile's DST is delayed by a week in September 2022.
        • Iran no longer observes DST after 2022.
        • Rename Europe/Kiev to Europe/Kyiv.
        • Finish moving duplicate-since-1970 zones to 'backzone'.
      • zonedb
        • Number of zones decreases from 258 to 237.
        • Number of links increases from 193 to 215.
      • zonedbx
        • Number of zones decreases from 377 to 356.
        • Number of links increases from 217 to 239.
AceTime - v1.11.3 - upgrade to TZDB 2022a

Published by bxparks over 2 years ago

AceTime - v1.11.2 - fix nullptr crash in certain subclasses of *ZoneProcessor

Published by bxparks over 2 years ago

  • 1.11.2 (2022-02-24, TZDB 2021e)
    • Fix crash triggered by certain subclasses of BasicZoneProcessor and
      ExtendedZoneProcessor.
      • The code did not handle nullptr for the BrokerFactory properly.
      • These particular classes do not know their BrokerFactory at
        compile-time, so they are set to nullptr initially. The
        setBrokerFactory() is expected to be called at runtime later.
      • No effect on the AceTime library itself which does not trigger this
        condition.
AceTime - v1.11.1 - update ZoneInfoBroker::targetZoneInfo(); no functional change

Published by bxparks over 2 years ago

  • 1.11.1 (2022-02-16, TZDB 2021e)
    • Update ZoneInfoBroker::targetZoneInfo() to return a ZoneInfoBroker
      instead of a raw ZoneInfo* pointer.
      • Internal wiring change, no change to external API.
      • Allows alternative ZoneInfoBroker classes to implement a consistent
        API.
AceTime - v1.11.0 - change Link timezones from hard links to symbolic links

Published by bxparks over 2 years ago

  • 1.11.0 (2022-02-14, TZDB 2021e)
    • Regenerate zonedb/ and zonedbx/ using latest AceTimeTool which
      identifies notable Zones and Policies whose DST shifts are not exactly
      0:00 or 1:00. No actual data change. Notable policies relevant from 2000
      until 2050 are:
      • ZonePolicy Eire: DST shift -1:00
      • ZonePolicy LH: DST shift 0:30
      • ZonePolicy Morocco: DST shift -1:00
      • ZonePolicy Namibia: DST shift -1:00
      • ZonePolicy StJohns: DST shift 2:00
      • ZonePolicy Troll: DST shift 2:00
    • Add support for overflow and underflow to TimePeriod.
      • When isError() returns true, the sign() method discriminates
        3 error conditions, and the printTo() prints the following:
    • Change Link entries from "hard links" to "symbolic links".
      • This allows a TimeZone object to know whether it is a Zone entry
        or a Link entry.
      • Add TimeZone::isLink() and ZoneProcessor::isLink() methods.
      • Add bool followLink = true parameter to various other methods
        (getZoneId(), printTo(), printShortTo()) which determines
        whether the method resolves to the current Link entry or follows the
        link to the destination Zone entry.
      • MemoryBenchmark says that this increases
        flash consumption by 100-300 bytes, due to the extra code needed to
        follow the symlink. But the ability to determine whether the TimeZone
        is a link or not will be necessary for an upcoming feature, so this
        slight increase in flash consumption seems worth it.
      • Regenerate zonedb/ and zonedbx to convert Link entries from
        hard links to symbolic links.
      • See Symbolic Links for more info.
    • Add offset_date_time_mutation methods.
      • Similar to zoned_date_time_mutation methods.
      • Provides some convenient mutation methods for OffsetDateTime.
    • Upgrade Arduino CLI from 0.19.2 to 0.20.2.
  • 1.10.0 (2022-01-18, TZDB 2021e)
    • MemoryBenchmark: Add memory consumption for ZoneSorterByName and
      ZoneSorterByOffsetAndName.
      • AVR: 180-530 bytes of flash
      • 32-bit: 120-600 bytes of flash
    • Rename internal TransitionStorage::findTransition() to
      findTransitionForSeconds() for better self-documentation.
    • Move third party SAMD21 boards to new Tier 3 (May work, but not supported)
      level.
      • I can no longer upload binaries to these boards using Arduino IDE
        1.8.19 and SparkFun SAMD Core 1.8.6.
    • Add support for fold parameter to control behavior around DST gaps
      and overlaps.
      • The semantics of the fold parameter is intended to be identical to
        Python PEP 495.
      • Add LocalTime::fold(), LocalDateTime::fold(),
        OffsetDateTime::fold(), ZonedDateTime::fold().
      • Update ExtendedZoneProcessor::getOffsetDateTime(acetime_t) to
        calculate the OffsetDateTime::fold() as an output parameter.
      • Update ExtendedZoneProcessor::getOffsetDateTime(const LocalDateTime&) to handle LocalDateTime::fold() as an input
        parameter.
      • Increases flash usage of ExtendedZoneProcessor by around 600 bytes
        on AVR, and 400-600 bytes on 32-bit processors.
    • Add toUnixSeconds64() and forUnixSeconds64() methods to
      LocalDate, LocalDateTime, OffsetDateTime, ZonedDateTime.
      • These use 64-bit int64_t integers, which allows Unix seconds to be
        used up to 2068-01-19T03:14:07Z (which is the limit of these
        various classes due to the internal use of 32-bit acetime_t).
      • These methods make it easier to interoperate with the time_t typedef
        for int64_t on the ESP8266 and ESP32 platforms.
    • Add EspTime app that shows how to integrate
      the SNTP client on the ESP8266 and ESP32 platforms with AceTime.
  • 1.9.0 (2021-12-02, TZDB 2021e)
    • Add ZoneSorterByName and ZoneSorterByOffsetAndName classes
      to sort zone indexes, ids, or names according to 2 pre-defined sorting
      criteria: (1) by name, or (2) by UTC offset and then by name.
    • Add examples/CompareAceTimeToHinnantDate to compare the performance of
      AceTime compared to Hinnant date library.
      • AceTime seems to be about 90X faster for converting date-time
        components to epoch seconds.
    • Add MaxBufSize comment field into zonedb[x]/zone_infos.h which is the
      maximum over all zones in that file. Must be less than or equal to
      ExtendedZoneProcessor::kMaxTransitions.
    • Potential Breaking Change: class TransitionStorage
      • Rename getHighWater() to getAllocSize(). This now returns the
        maximum number of transitions that has been allocated so far, which
        happens to be getHighWater() + 1.
      • Rename resetHighWater() to resetAllocSize().
      • Rename ExtendedZoneProcessor::resetTransitionHighWater() to
        resetTransitionAllocSize().
      • All of these methods were intended for internal debugging so these
        changes are not considered to be an API change.
      • The semantics of these methods are now closer to the algorithm in
        AceTimePython/zone_processor.ZoneProcessor.
    • Breaking Change: Extract BasicZoneProcessorCache and
      ExtendedZoneProcessorCache out of BasicZoneManager and
      ExtendedZoneManager. Remove all pure virtual methods from
      ZoneManager, making the class hierarchy non-polymorphic.
      • Saves 1100-1300 bytes of flash on AVR processors.
      • See Migrating to v1.9 for
        migration info.
    • Breaking Change: Remove pure virtual methods from LinkManager,
      analogous to their removal from ZoneManager.
      • Saves 68 bytes of flash on AVR processors.
      • See Migrating to v1.9 for
        migration info.
AceTime - v1.8.2 - upgrade to TZDB 2021e

Published by bxparks almost 3 years ago