- Unreleased
- Add
CstrPrinthelper class which can be passed into the variousprintTo()methods. The content can be retrieved using theCstrPrint::getCstr()method which returns a normalconst char*c-string. - Add 'Validation Tests' GitHub workflow for running
tests/validation/*Test.
- Add
- 1.1 (2020-04-25, TZ DB version 2020a)
- Fix broken links in
README.md. - Fix typos in
USER_GUIDE.mdand update its version number to 1.0 as it should have been back in October. - Massive refactor of
./toolsprocessing pipeline and updatevalidation/tests.- Add mypy strict type checking for Python scripts under
tools. - Funnel
validation*.{h,cpp}code generation through a single program using avalidation_data.jsonintermediate file. - Funnel processing of TZDB output from
transformer.pyinto a singletzdbcollector.pywhich can produce atzdb.jsonoutput. - Separate
validator.pyprocessing into a distinct section.
- Add mypy strict type checking for Python scripts under
- Add validation tests against Python
dateutillibrary (similar topytz). - Update TZ Database version to 2020a that was released on 2020-04-23.
- Fix broken links in
- 1.0 (2019-10-02, TZ DB version 2019c)
- Add initial support for GitHub actions to implement continuous integration using the unit tests that run under UnitHostDuino.
- Allow NtpClock to use an existing WiFi connection. Add
examples/HelloNtpClock/to demonstrate this. (#24, thanks @denis-stepanov). - Fix compiler warning about duplicate
FPSTR()macro for ESP32 Core version >=1.0.3. - Generate the zonedb files for the various
validation/*Testintegration tests on-demand, instead of using the zonedb files checked intosrc/ace_time/zonedb[x]. This allows us to match the version of the TZ Database used by AceTime to the version used by Java 11, pytz, and Hinnant Date, independently of the version that is generated intosrc/ace_time/zonedb[x]. - Update
src/ace_time/zonedb[x]files to TZ version 2019c. - Graduate to version 1.0.
- 0.8.1 (2019-08-26, TZ DB version 2019b)
- Update
SystemClockCoroutineto be compatible withCOROUTINE_DELAY_SECONDS()API changed in AceRoutine v0.3. - Fix typos and grammar errors in
USER_GUIDE.mdandREADME.md. - Remove
YearMonthabstraction inBasicZoneProcessor, saving 12 bytes of flash in WorldClock.
- Update
- 0.8 (2019-08-19, TZ DB version 2019b)
- Handle
Fri<=1correctly in various python scripts. (#17) - Improve resolution of zonedb files and ZoneProcessor classes. (#18)
- Both BasicZoneProcessor and ExtendedZoneProcessor support 1-minute resolutions for the AT and UNTIL fields.
- BasicZoneProcessor (and zonedb files) support a 15-minute resolution for both STDOFF and DST offset fields.
- ExtendedZoneProcessor (and zonedbx files) support one-minute
resolution for STDOFF field and 15-minute resolution for DST offset
(with a range of -01:00 to 02:45). (4 bits of the
deltaCodefield were given to theoffsetCodefield to give it the 1-minute resolution.) - Regenerate zonedbx using 1-minute resolution.
- Fix broken BasicZoneProcessor on some timezones between 1975 and 2000. Did not handle transitions from fixed ZoneEra (RULES='-') to named ZoneEra (RULES=reference) or vise versa. Verified against pytz and Hinnant date from 1975 to 2050.
- Handle
- 0.7.2 (2019-08-14, TZ DB version 2019b)
- Support timezones whose FORMAT contains a '/' with a fixed RULES column. Seems to make BasicZoneProcessor slightly smaller (20-80 bytes) and ExtendedZoneProcessor slightly bigger (50-100 bytes).
- Split
--granularityinto--until_at_granularityandoffset_granularity. Current zonedb files use values of 60 and 900 respectively.
- 0.7.1 (2019-08-13, TZ DB version 2019b)
- Replace
TimeZone::printAbbrevTo()with more flexible and usefulTimeZone::getAbbrev().
- Replace
- 0.7 (2019-08-13, TZ DB version 2019b)
- Change TimeZoneData to store mStdOffset and mDstOffset in units of one minute (instead of 15-minute increments, "code") in the off chance that the library supports timezones with one-minute shifts in the future.
- Implement TimeOffset using 2 bytes (
int16_t) instead of one byte (int8_t) to give it a resolution of one minute instead of 15 minutes. - Generate zoneinfo files containing AT and UNTIL timestamps with
one-minute resolution (instead of 15-minute resolution). ZoneInfo files
(
zonedb/andzonedbx/) remain identical in size. Flash memory consumption usually increases by 130 to 500 bytes, but sometimes decreases by 50-100 bytes. Timezones whose DST transitions occur at 00:01 (America/Goose_Bay, America/Moncton, America/St_Johns, Asia/Gaza, Asia/Hebron) no longer truncate to 00:00. - Rename
TimeOffset::forHour()toforHours()for consistency withforMinutes(). - Make
ExtendedZoneProcessormore memory efficient for 32-bit processors by packing internal fields to 4-byte boundaries. - Integrate C++11/14/17
Hinnant Date library by
creating additional
tests/validationtests. - Upgrade
zonedbandzonedbxzoneinfo files to version 2019b, after validating against the Hinnant date library. - Upgrade to
pytzversion 2019.2 to pickup TZ Database 2019b.
- 0.6.1 (2019-08-07, TZ DB version 2019a)
- Create a second Jenkins continuous build pipeline file
tests/JenskinfileUnitHostto use UnitHostDuino to run the unit tests natively on Linux. The entire set of unit tests builds and runs in 20 seconds under UnixHostduino, compared to about 8 minutes for the single Nano environemnt, and 32 minutes against 4 boards (Nano, ESP8266, ESP32, SAMD21). - Fix Doxygen PREPROCESSOR so that it picks up classes which are enabled only on some environments (e.g. ESP8266, ESP32).
- Add circuit schematics to OledClock and WorldClock examples.
- Simplify logging::printf() used internally for debugging.
- No functional change from 0.6.
- Create a second Jenkins continuous build pipeline file
- 0.6 (2019-08-02, TZ DB version 2019a)
- Update tests to use
UnixHostDuino. - Fix broken restore functionality in
CommandLineClock. Make it work on Unix using UnixHostDuino. Make it work on ESP8266 and ESP32 again. - Update flash memory consumption numbers in
zonedb/zone_infos.cppandzonedbx/zone_infos.cpp. - Lift
ace_time::common::DateStringsto justace_time::DateStringsbecause it was the only data/time class in thecommon::namespace so it seemed inconsistent and out of place. - Breaking Change Large refactoring and simplification of the
ace_time::clockclasses. MergedTimeKeeperandTimeProviderinto a singleClockclass hierarcy. MergedSystemClockSyncLoop(separate class) intoSystemClockLoop(subclass ofSystemClock) andSystemClockSyncCoroutine(separate class) intoSystemClockCoroutine(subclass ofSystemClockwith mixin oface_routine::Coroutine). MergedkeepAlive()into::loop()and::runCoroutine()methods, so we don't need to worry about it separately anymore. MadeSystemClockLoopuse the non-blocking methods ofClock, making it as responsive asSystemClockCoroutine. - Add
UnixClock.hwhich provides access to the internal Unix clock when using UnixHostDuino.
- Update tests to use
- 0.5.2 (2019-07-29, TZ DB Version 2019a)
- Create
HelloZoneManagerand add it to theREADME.md. - Recommend using "Arduino MKR ZERO" board or "SparkFun SAMD21 Mini Breakout" board for the "SAMD21 M0 Mini" boards.
- Pack
basic::ZoneInfo,extended:ZoneInfoand related structs tighter on 32-bit processors, saving 2.5kB on the Basic zoneinfo files and 5.6kB on Extended zoneinfo files. - Pack
basic::Transitionandextended::Transitiontighter on 32-bit processors, saving 20-32 bytes onBasicZoneProcessorandExtendedZoneProcessor. - Test and support ATmega2560 AVR processor.
- Replace all uses of
SerialwithSERIAL_PORT_MONITORfor compatibility with boards (e.g. SAMD boards) which useSerialUSBas the serial monitor.
- Create
- 0.5.1 (2019-07-24, TZ DB version 2019a, beta)
- Add documentation about the ZoneManager into
USER_GUIDE.md. - Move
DateStringsstring pointers into PROGMEM, saving 42 bytes of RAM. - Use
SERIAL_PORT_MONITORinstead ofSerialeverywhere for portability across different Arduino boards. - Support SAMD21 boards except for EEPROM which SAMD21 does not support.
- Add documentation about the ZoneManager into
- 0.5 (2019-07-21, TZ DB version 2019a, beta)
- Remove over-engineered
SystemClockHeartbeatLoopandSystemClockHeartbeatLoopand replace with just a call toSystemClock::keepAlive(). - Remove overly complex
ManualZoneProcessorand merge most of its functionality directly into theTimeZoneusingkTypeManual. We lose the manual abbreviations provided byManualZoneProcessorbut the simplification of using just theTimeZoneobject without an extra object seems worth it. - Add a stable
zoneIdtoZoneInfothat identifies a zone. It is formed using a hash of the fully qualified zonename. Thetzcompiler.pygenerator script will detect hash collisions and create an alternate hash. - Rename old
ZoneManageras theZoneRegistrar, and repurposeZoneManageras theTimeZonefactory, which keeps an internal cache ofZoneProcessor.TimeZoneobjects can be dynamically bound toZoneProcessorobjects usingcreateForZoneInfo(),createForZoneName(), `createForZoneId(). - Add
TimeZoneDatadata struct to allow serialization of a TimeZone object as a zoneId so that it can be reconstructed usingZoneManger::createForTimeZoneData(). - Rename
ZoneSpecifiertoZoneProcessorto describe its functionality better.ZoneInfois now passed directly into the TimeZone object using theTimeZone::forZoneInfo()factory method, with theZoneProcessoracting as a helper object.
- Remove over-engineered
- 0.4 (2019-07-09, TZ DB version 2019a, beta)
- Support the less-than-or-equal syntax
{dayOfWeek}<={dayOfMonth}appearing in version 2019b of the TZ Database which containsRule Zion, 2005 to 20012, IN Apr, ON Fri<=1. - Add BasicZoneManager and ExtendedZoneManager to retrieve ZoneInfo from TZ Database string identifier (e.g. "America/Los_Angeles").
- Add configuration options (
ACE_TIME_USE_BASIC_PROGMEMandACE_TIME_USE_EXTENDED_PROGMEM) to place zoneinfo files into PROGMEM to save static RAM.
- Support the less-than-or-equal syntax
- 0.3.1 (2019-06-30, TZ DB version 2019a, beta)
- Add copyright notices on source files.
- Fix typos and formatting of
README.mdandUSER_GUIDE.md. - No functional change from 0.3.
- 0.3 (2019-06-28, TZ DB version 2019a, beta)
- Support
Linkentries from TZ Database files as C++ references to correspondingZoneentries. - Add
backwardandetcterafiles from TZ Database to the tzcompiler.py processing.ExtendedZoneProcessornow supports every Zone and Link entry in the TZ Database (except those inbackzoneandsystemv). - Add better zone and link name normalization. Convert
+into_PLUS_, all other non-alphanumeric (0-9a-zA-Z_) converted to underscore_. - Move validation unit tests into separate
tests/validationdirectory. Use Makefiles to generatevalidation_data.*files dynamically at compile time.
- Support
- 0.2 (2019-06-26, TZ DB version 2019a, alpha)
- Reduce flash memory size of WorldClock by removing extra font.
- Split
USER_GUIDE.mdfromREADME.md. - Rename
ace_time::providertoace_time::clockand renameSystemTimeProvidertoSystemClock. - Add
HelloSystemClockexample code. - Add
isValidYear()into variousforComponents()methods to check int8_t range of year component. - Rename
DateStrings::weekDay*()methods todayOfWeek*()for consistency. - Change
ZonedDateTime::printTo()format to match Java Time format. - Remove
frienddeclarations not related to unit tests. - Remove redundant definitions of
kInvalidEpochSeconds, standardize onLocalDate::kInvalidEpochSeconds. - Make
timeOffseta required parameter for constructors and factory methodsOffsetDateTimeinstead of defaulting toTimeOffset(). - Make
timeZonea required parameter in constructors and factory methods ofZonedDateTime. - Fix
BasicZoneProcessor::getOffsetDateTime()to handle gaps and overlaps in a reasonable way, and perform some amount of normalization.
- 0.1 (2019-06-15, TZ DB version 2019a, alpha)
- Initial release on GitHub to establish a reference point.
- Upgraded to TZ Database version 2019a.
- (2018-08-20)
- Start of library in private repo.