Skip to content

Releases: bxparks/AceTime

v1.11.1 - update ZoneInfoBroker::targetZoneInfo(); no functional change

17 Feb 00:34
d8acf1f

Choose a tag to compare

  • 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.

v1.11.0 - change Link timezones from hard links to symbolic links

14 Feb 22:17
c2b5c00

Choose a tag to compare

  • 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.

v1.10.0 - add 'fold' to control DST gaps and overlaps; add more docs and examples for ESP8266 and ESP32

18 Jan 21:07
1a98be0

Choose a tag to compare

  • 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.

v1.9.0 - allow sorting of zones by name or offset-name; reduce flash by 1100-1300 bytes on AVR

03 Dec 02:47
02ff26c

Choose a tag to compare

  • 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.

v1.8.2 - upgrade to TZDB 2021e

29 Oct 01:13
a5601c4

Choose a tag to compare

v1.8.1 - upgrade to TZDB 2021d

18 Oct 21:58
49183f6

Choose a tag to compare

  • 1.8.1 (2021-10-18, TZDB 2021d)
    • Add make -C examples/MemoryBenchmark epoxy to GitHub actions.
    • Upgrade to TZDB 2021d.

v1.8.0 - extract Clocks to AceTimeClock; replace Wire.h with AceWire.h; extract thin links to LinkManagers

15 Oct 16:09
7511ff9

Choose a tag to compare

  • 1.8.0 (2021-10-15, TZDB 2021c)
    • Breaking Change: Move clock classes under ace_time::clock and
      implementation classes under ace_time::hw to the new
      AceTimeClock repo.
      • Classes remain in the same C++ namespace.
      • Client code needs to add #include <AceTimeClock.h>.
      • See Migrating to v1.8 for
        migration info.
    • Breaking Change: Convert DS3231.h into a template class with an
      indirect dependency to <AceWire.h>, replacing direct dependency on
      <Wire.h>.
      • Just including the <Wire.h> header causes flash memory to be
        consumed, even if Wire object is never used.
      • Saves 1000-1500 bytes of flash on AVR, and up to 4000 bytes on STM32.
      • See Migrating to v1.8 for
        migration info.
    • Breaking Change: Extract thin link functionality from
      BasicZoneManager and ExtendedZoneManager into new BasicLinkManager
      and ExtendedLinkManager.
      • Saves 200-500 bytes of flash memory if the feature is not used.
      • Client application can determine whether to pay for this
        functionality, instead of automatically being included into the
        ZoneManager.
      • See the Thin Links section in the User
        Guide and Migrating to v1.8 for
        migration info.
    • Simplify documentation
      • Merge docs/installation.md into README.md.
      • Move docs/date_time_timezone.md to USER_GUIDE.md.
      • Remove docs/clock_system_clock.md after migrating it to
        the AceTimeClock project.
      • Merge docs/comparisons.md into README.md.

v1.7.5 - upgrade to TZDB 2021c; fix edge case bug when Transition occurs at ZoneEra transition

07 Oct 04:17
a40b87d

Choose a tag to compare

  • 1.7.5 (2021-10-06, TZDB 2021c)
    • Bug Fix: Update ExtendedZoneProcessor.h to implement better
      detection of Transitions that occur at the exact same time as the switch
      to a different ZoneEra.
      • They are now considered to happen at the same time if any of the 'w'
        time, 's' time, or 'u' time are equal.
      • The behavior of ExtendedZoneProcessor.h should now be identical
        to zone_processor.py in the AceTimePython library.
      • Seems to affect only Europe/Lisbon in 1992, which is not a part of
        the predefined zonedb or zonedbx database, which normally include
        only 2000 until 2050.
    • Testing
      • Create AceTimePython
        library extracted from the previously split
        AceTimeTools project.
      • Update ace_time/testing/ExtendedTransitionTest.h to validate
        the exact equality between the observed maximum buffer size of
        TransitionStorage as observed by ExtendedZoneProcessor and the
        buffer size calculated by AceTimeTools using zone_processor.py of
        AceTimePython library.
      • Create examples/DebugZoneProcessor for debugging the internal logic
        of ExtendedZoneProcessor.
    • Tool Chain
      • Upgrade ESP8266 Core from 2.7.4 to 3.0.2.
        • Flash consumption increases by 3-5 kB across the boad.
      • Upgrade Arduino CLI from 0.19.1 to 0.19.2.
      • Upgrade Arduino IDE from 1.8.13 to 1.8.16.
      • Upgrade Teensyduino from 1.54 to 1.55.
      • Upgrade SparkFun SAMD Core from 1.8.3 to 1.8.4.
    • TZDB Upgrade TZDB from 2021a to 2021c.
      • TZDB 2021b is skipped because of controversial changes which were
        reverted in 2021c.
      • 2021c announcement:
        https://mm.icann.org/pipermail/tz-announce/2021-October/000067.html
      • 2021b announcement:
        https://mm.icann.org/pipermail/tz-announce/2021-September/000066.html
      • Jordan now starts DST on February's last Thursday.
      • Samoa no longer observes DST.
      • 10 Zones from 2021a were converted to Links:
        • Africa/Accra -> Africa/Abidjan
        • America/Atikokan -> America/Panama
        • America/Blanc-Sablon -> America/Puerto_Rico
        • America/Creston -> America/Phoenix
        • America/Curacao -> America/Puerto_Rico
        • America/Nassau -> America/Toronto
        • America/Port_of_Spain -> America/Puerto_Rico
        • Antarctica/DumontDUrville -> Pacific/Port_Moresby
        • Antarctica/Syowa -> Asia/Riyadh
        • Pacific/Enderbury -> Pacific/Kanton
      • 1 new Zone was created:
        • Pacific/Kanton
      • BasicZoneManager now supports 258 Zones and 193 Links using the
        zonedb database
      • ExtendedZoneManager now supports 377 Zones and 217 Links using the
        zonedbx database

v1.7.4 - move tools and validation tests into separate projects

26 Aug 22:05
3720cc5

Choose a tag to compare

  • 1.7.4 (2021-08-26)
    • Move ./tools directory into new
      AceTimeTool repo.
    • Move ./tests/validation directory into new
      AceTimeValidation repo.
      • Update .github/workflows/validation.yml to use AceTimeValidation
        instead of ./tests/validation.
    • This is a maintenance release. No changes to the core library code.

1.7.3 - fix broken documentation links; maintenance release before major refactoring

25 Aug 23:21
0fab5b8

Choose a tag to compare

  • 1.7.3 (2021-08-25)
    • Fix numerous broken links in documents moved to docs/*.md in an earlier
      refactoring.
    • Add experimental DS3231Module class that uses AceWire library.
    • This is a maintenance release before some major refactoring. No changes to
      core library code.