Releases: bxparks/AceTime
Releases · bxparks/AceTime
2.1.1 - update AutoBenchmark; add ZonedExtra::forComponents() for consistency
- 2.1.1 (2023-02-02, TZDB version 2022g)
ZonedExtra- Add
ZonedExtra::forComponents()factory method, for consistency with
ZonedDateTimeclass.
- Add
examples/AutoBenchmark- Add
ZonedExtrabenchmarks.
- Add
README.md- Update
AceTimeValidationvalidation years to[2000,2100). - Update memory and cpu benchmarks.
- Update
v2.1.0 - unified links; simplify TimeZone using ZonedExtra class
- 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:- Migrating to v2.1
- ZonedExtra in the User Guide
- Unified Links in the User Guide
- Potentially Breaking: zonedb,zonedbx
- Rename
kPolicyXxxtokZonePolicyXxxfor consistency. These are
expected to be used only internally, so shouldn't cause external
breakage.
- Rename
- Breaking:
TimeZone.h- Replace 3 separate extraction methods in
TimeZonewith a new
ZonedExtraclass - Removed:
TimeZone::getUtcOffset()- Replaced by:
ZonedExtra::timeOffset()
- Replaced by:
- Removed:
TimeZone::getDeltaOffset()- Replaced by:
ZonedExtra::dstOffset()
- Replaced by:
- Removed
TimeZone::getAbbrev()- Replaced by:
ZonedExtra::abbrev() ZonedExtra::abbrev()returns pointer to a local string buffer
instead of a transient buffer deep insideTransitionobject.TimeZonebecomes closer to being thread-safe
- Replaced by:
- Replace 3 separate extraction methods in
- New Class:
ZonedExtra.hZonedExtra::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.
TimeZoneclass simplified- Removed
followLinkflag on various methods. - Only 2 methods apply to Links:
isLink()and
printTargetNameTo().
- Removed
- 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/andtesting/tzonedbx/.- Reduces maintenance cost of various hand-crafted ZoneInfo and
ZonePolicy entries for unit tests. - Can test against real timezones with predictable behavior.
- Reduces maintenance cost of various hand-crafted ZoneInfo and
- Migrate most unit tests to use the smaller, testing zone databases at
- There are a handful API breaking changes in this release in the pursuit of
2.0.1 - upgrade to TZDB 2022g; include notable policies in notable zones comments
- 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
zonedbxis accidentally corrupted (e.g. by using
one withint8year fields instead ofint16year fields).
- This may happen if
- Incorporate notable
zone_policies.hcomments 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
- https://mm.icann.org/pipermail/tz-announce/2022-November/000076.html
- Prevent
expand timezone support from [2000,2050) to [2000,2100); allow adjustable epoch year
- 2.0 (2022-11-04, TZDB 2022f) Breaking Change See
Migrating to 2.0.0- Change internal storage type of
yearcomponent fromint8_tto
int16_t, extending the range of valid years from [-1873,2127] to
[1,9999].- Remove
yearTiny()getters and setters fromLocalDate,
LocalDateTime,OffsetDateTime, andZonedDateTime.- They were not documented except in doxygen docs.
- Remove from
LocalDate:kInvalidYearTiny, replaced withkInvalidYearkMinYearTiny, replaced withkMinYearkMaxYearTiny, replaced withkMaxYearforTinyComponents()
- Remove from
LocalDateTimeforTinyComponents()
- Update AceTimeTools
to generatesrc/zonedbandsrc/zonedbxusingint16_tyear types.
- Remove
- Extend
untilYearof zonedb and
zonedbx databases to 10000- databases now valid over the years
[2000,10000) zonedbxadds 75 additional Rules forkPolicyMorocco(e.g.
zone "Africe/Casablanca") due to the precalculated DST shifts which
are listed in the IANA TZ DB up to the year 2087.zonedbremains unchanged
- databases now valid over the years
- Change epoch seconds conversion algorithm
- Extract different epoch date conversion algorithms to be used/tested.
Two of them areEpochConverterJulianandEpochConverterHinnantEpochConverterJulianimplements the algorithms found in
wikipedia article https://en.wikipedia.org/wiki/Julian_day.EpochConverterHinnantimplements the algorithms found in
https://howardhinnant.github.io/date_algorithms.html.
- Migrate
LocalDateto use theEpochConverterHinnantinstead of
EpochConverterJulian.- The primary reason is that I am able to fully understand the
algorithms described inEpochConverterHinnant. - In contrast, I have almost no understanding of the algorithms
implemented byEpochConverterJulian.
- The primary reason is that I am able to fully understand the
- Extract different epoch date conversion algorithms to be used/tested.
- Configurable epoch year using new
Epochutility 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.
- Expected to be rarely used in user applications, but somewhat
- Add
Epoch::epochValidYearLower()andEpoch::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.
- Defines the 100-year interval which is +/- 50 years from the
- Add cache invalidation methods which must be called if
currentEpochYear()is changed at runtime.ZoneProcessor::resetTransitionCache()ZoneProcessorCache::resetZoneProcessors()ZoneManager::resetZoneProcessors()
- Add
- Remove
toUnixSeconds()andforUnixSeconds()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()andforUnixSeconds64()are
retained.
- They will become invalid in the year 2038, and it's now the year 2022
- Flash usage increases (see MemoryBenchmark for
more details:- AVR:
- BasicZoneManager increases ~200 bytes
- ExtendedZoneManager increases ~500 bytes
zonedbincreases ~1.5 kiBzonedbxincreases ~3 kiB
- ESP8266
- BasicZoneManager increases ~50 bytes
- ExtendedZoneManager increases ~150 bytes
zonedbincreases ~300 byteszonedbxincreases ~1.5 kiB
- AVR:
- Change internal storage type of
1.11.7 - upgrade to TZDB 2022f
- 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.
- https://mm.icann.org/pipermail/tz-announce/2022-October/000075.html
- Upgrade TZDB from 2022e to 2022f
v1.11.6 - upgrade to TZDB 2022e
- 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.
- https://mm.icann.org/pipermail/tz-announce/2022-October/000074.html
- Upgrade TZDB from 2022d to 2022e
v1.11.5 - upgrade to TZDB 2022d
- 1.11.5 (2022-10-06, TZDB 2022d)
- Upgrade TZDB from 2022b to 2022d
- 2022c
- https://mm.icann.org/pipermail/tz-announce/2022-August/000072.html
- Work around awk bug in FreeBSD, macOS, etc.
- Improve tzselect on intercontinental Zones.
- Skipped because there were no changes that affected AceTime.
- https://mm.icann.org/pipermail/tz-announce/2022-August/000072.html
- 2022d
- https://mm.icann.org/pipermail/tz-announce/2022-September/000073.html
- Palestine transitions are now Saturdays at 02:00.
- Simplify three Ukraine zones into one.
- https://mm.icann.org/pipermail/tz-announce/2022-September/000073.html
- 2022c
- Upgrade tool chain
- Arduino CLI from 0.19.2 to 0.27.1
- Arduino AVR Core from 1.8.4 to 1.8.5
- STM32duino from 2.2.0 to 2.3.0
- ESP32 Core from 2.0.2 to 2.0.5
- Teensyduino from 1.56 to 1.57
- Upgrade TZDB from 2022b to 2022d
v1.11.4 - upgrade to TZDB 2022b; add daysUntil() utility function
- 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.
- https://mm.icann.org/pipermail/tz-announce/2022-August/000071.html
- Add
v1.11.3 - upgrade to TZDB 2022a
- 1.11.3 (2022-03-20, TZDB 2022a)
- Update to TZDB 2022a.
- https://mm.icann.org/pipermail/tz-announce/2022-March.txt
- "Palestine will spring forward on 2022-03-27, not -03-26."
- No changes to code.
- Update to TZDB 2022a.
v1.11.2 - fix nullptr crash in certain subclasses of *ZoneProcessor
- 1.11.2 (2022-02-24, TZDB 2021e)
- Fix crash triggered by certain subclasses of
BasicZoneProcessorand
ExtendedZoneProcessor.- The code did not handle nullptr for the
BrokerFactoryproperly. - These particular classes do not know their
BrokerFactoryat
compile-time, so they are set tonullptrinitially. The
setBrokerFactory()is expected to be called at runtime later. - No effect on the AceTime library itself which does not trigger this
condition.
- The code did not handle nullptr for the
- Fix crash triggered by certain subclasses of