Releases: bxparks/AceTime
Releases · bxparks/AceTime
v1.11.1 - update ZoneInfoBroker::targetZoneInfo(); no functional change
- 1.11.1 (2022-02-16, TZDB 2021e)
- Update
ZoneInfoBroker::targetZoneInfo()to return aZoneInfoBroker
instead of a rawZoneInfo*pointer.- Internal wiring change, no change to external API.
- Allows alternative
ZoneInfoBrokerclasses to implement a consistent
API.
- Update
v1.11.0 - change Link timezones from hard links to symbolic links
- 1.11.0 (2022-02-14, TZDB 2021e)
- Regenerate
zonedb/andzonedbx/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()returnstrue, thesign()method discriminates
3 error conditions, and theprintTo()prints the following:- 0: generic error, ""
- +1: overflow, "<+Inf>"
- -1: underflow, "<-Inf>"
- See USER_GUIDE.md#TimePeriod.
- When
- 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()andZoneProcessor::isLink()methods. - Add
bool followLink = trueparameter 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/andzonedbxto convert Link entries from
hard links to symbolic links. - See Symbolic Links for more info.
- This allows a TimeZone object to know whether it is a Zone entry
- Add
offset_date_time_mutationmethods.- Similar to
zoned_date_time_mutationmethods. - Provides some convenient mutation methods for
OffsetDateTime.
- Similar to
- Upgrade Arduino CLI from 0.19.2 to 0.20.2.
- Regenerate
v1.10.0 - add 'fold' to control DST gaps and overlaps; add more docs and examples for ESP8266 and ESP32
- 1.10.0 (2022-01-18, TZDB 2021e)
- MemoryBenchmark: Add memory consumption for
ZoneSorterByNameand
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.
- I can no longer upload binaries to these boards using Arduino IDE
- Add support for
foldparameter to control behavior around DST gaps
and overlaps.- The semantics of the
foldparameter 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 theOffsetDateTime::fold()as an output parameter. - Update
ExtendedZoneProcessor::getOffsetDateTime(const LocalDateTime&)to handleLocalDateTime::fold()as an input
parameter. - Increases flash usage of
ExtendedZoneProcessorby around 600 bytes
on AVR, and 400-600 bytes on 32-bit processors.
- The semantics of the
- Add
toUnixSeconds64()andforUnixSeconds64()methods to
LocalDate,LocalDateTime,OffsetDateTime,ZonedDateTime.- These use 64-bit
int64_tintegers, 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-bitacetime_t). - These methods make it easier to interoperate with the
time_ttypedef
forint64_ton the ESP8266 and ESP32 platforms.
- These use 64-bit
- Add EspTime app that shows how to integrate
the SNTP client on the ESP8266 and ESP32 platforms with AceTime.
- MemoryBenchmark: Add memory consumption for
v1.9.0 - allow sorting of zones by name or offset-name; reduce flash by 1100-1300 bytes on AVR
- 1.9.0 (2021-12-02, TZDB 2021e)
- Add
ZoneSorterByNameandZoneSorterByOffsetAndNameclasses
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.- See the Zone Sorting section in the
USER_GUIDE.md. - Adds a new dependency to
AceSorting library.
- See the Zone Sorting section in the
- Add
examples/CompareAceTimeToHinnantDateto 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.
- AceTime seems to be about 90X faster for converting date-time
- Add
MaxBufSizecomment field intozonedb[x]/zone_infos.hwhich 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()togetAllocSize(). This now returns the
maximum number of transitions that has been allocated so far, which
happens to begetHighWater() + 1. - Rename
resetHighWater()toresetAllocSize(). - 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.
- Rename
- Breaking Change: Extract
BasicZoneProcessorCacheand
ExtendedZoneProcessorCacheout ofBasicZoneManagerand
ExtendedZoneManager. Remove all purevirtualmethods 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
virtualmethods fromLinkManager,
analogous to their removal fromZoneManager.- Saves 68 bytes of flash on AVR processors.
- See Migrating to v1.9 for
migration info.
- Add
v1.8.2 - upgrade to TZDB 2021e
- 1.8.2 (2021-10-28, TZDB 2021e)
- Update to TZDB 2021e.
- https://mm.icann.org/pipermail/tz-announce/2021-October/000069.html
- Palestine will fall back 10-29 (not 10-30) at 01:00.
- Update to TZDB 2021e.
v1.8.1 - upgrade to TZDB 2021d
- 1.8.1 (2021-10-18, TZDB 2021d)
- Add
make -C examples/MemoryBenchmark epoxyto GitHub actions. - Upgrade to TZDB 2021d.
- Add
v1.8.0 - extract Clocks to AceTimeClock; replace Wire.h with AceWire.h; extract thin links to LinkManagers
- 1.8.0 (2021-10-15, TZDB 2021c)
- Breaking Change: Move clock classes under
ace_time::clockand
implementation classes underace_time::hwto 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.hinto 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 ifWireobject 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.
- Just including the
- Breaking Change: Extract thin link functionality from
BasicZoneManagerandExtendedZoneManagerinto newBasicLinkManager
andExtendedLinkManager.- 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.mdinto README.md. - Move
docs/date_time_timezone.mdtoUSER_GUIDE.md. - Remove
docs/clock_system_clock.mdafter migrating it to
the AceTimeClock project. - Merge
docs/comparisons.mdinto README.md.
- Merge
- Breaking Change: Move clock classes under
v1.7.5 - upgrade to TZDB 2021c; fix edge case bug when Transition occurs at ZoneEra transition
- 1.7.5 (2021-10-06, TZDB 2021c)
- Bug Fix: Update
ExtendedZoneProcessor.hto implement better
detection of Transitions that occur at the exact same time as the switch
to a differentZoneEra.- 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.hshould now be identical
tozone_processor.pyin theAceTimePythonlibrary. - Seems to affect only
Europe/Lisbonin 1992, which is not a part of
the predefinedzonedborzonedbxdatabase, which normally include
only 2000 until 2050.
- They are now considered to happen at the same time if any of the 'w'
- Testing
- Create AceTimePython
library extracted from the previously split
AceTimeTools project. - Update
ace_time/testing/ExtendedTransitionTest.hto validate
the exact equality between the observed maximum buffer size of
TransitionStorage as observed byExtendedZoneProcessorand the
buffer size calculated by AceTimeTools usingzone_processor.pyof
AceTimePythonlibrary. - Create
examples/DebugZoneProcessorfor debugging the internal logic
ofExtendedZoneProcessor.
- Create AceTimePython
- 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.
- Upgrade ESP8266 Core from 2.7.4 to 3.0.2.
- 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/AbidjanAmerica/Atikokan -> America/PanamaAmerica/Blanc-Sablon -> America/Puerto_RicoAmerica/Creston -> America/PhoenixAmerica/Curacao -> America/Puerto_RicoAmerica/Nassau -> America/TorontoAmerica/Port_of_Spain -> America/Puerto_RicoAntarctica/DumontDUrville -> Pacific/Port_MoresbyAntarctica/Syowa -> Asia/RiyadhPacific/Enderbury -> Pacific/Kanton
- 1 new Zone was created:
Pacific/Kanton
- BasicZoneManager now supports 258 Zones and 193 Links using the
zonedbdatabase - ExtendedZoneManager now supports 377 Zones and 217 Links using the
zonedbxdatabase
- TZDB 2021b is skipped because of controversial changes which were
- Bug Fix: Update
v1.7.4 - move tools and validation tests into separate projects
- 1.7.4 (2021-08-26)
- Move
./toolsdirectory into new
AceTimeTool repo. - Move
./tests/validationdirectory into new
AceTimeValidation repo.- Update
.github/workflows/validation.ymlto use AceTimeValidation
instead of./tests/validation.
- Update
- This is a maintenance release. No changes to the core library code.
- Move
1.7.3 - fix broken documentation links; maintenance release before major refactoring
- 1.7.3 (2021-08-25)
- Fix numerous broken links in documents moved to
docs/*.mdin an earlier
refactoring. - Add experimental
DS3231Moduleclass that usesAceWirelibrary. - This is a maintenance release before some major refactoring. No changes to
core library code.
- Fix numerous broken links in documents moved to