Skip to content

Releases: bxparks/AceTime

2.1.1 - update AutoBenchmark; add ZonedExtra::forComponents() for consistency

03 Feb 00:05
cad5940

Choose a tag to compare

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

v2.1.0 - unified links; simplify TimeZone using ZonedExtra class

30 Jan 03:51

Choose a tag to compare

  • 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 - upgrade to TZDB 2022g; include notable policies in notable zones comments

04 Dec 19:11
cdf3adf

Choose a tag to compare

  • 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

expand timezone support from [2000,2050) to [2000,2100); allow adjustable epoch year

04 Nov 23:57
09175d4

Choose a tag to compare

  • 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

1.11.7 - upgrade to TZDB 2022f

02 Nov 22:56
bdd831d

Choose a tag to compare

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

v1.11.6 - upgrade to TZDB 2022e

23 Oct 01:02
8bed5e1

Choose a tag to compare

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

v1.11.5 - upgrade to TZDB 2022d

06 Oct 17:09
9f523e8

Choose a tag to compare

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

14 Aug 03:08
22be0e7

Choose a tag to compare

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

v1.11.3 - upgrade to TZDB 2022a

21 Mar 14:40
28d1532

Choose a tag to compare

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

24 Feb 20:36
cdf4488

Choose a tag to compare

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