AceTime

Date and time classes for Arduino supporting the IANA TZ Database time zones to convert epoch seconds to date and time components in different time zones.

MIT License

Stars
77
AceTime - v1.8.1 - upgrade to TZDB 2021d

Published by bxparks about 3 years ago

  • 1.8.1 (2021-10-18, TZDB 2021d)
    • Add make -C examples/MemoryBenchmark epoxy to GitHub actions.
    • Upgrade to TZDB 2021d.
  • 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.
  • 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
AceTime - v1.7.4 - move tools and validation tests into separate projects

Published by bxparks about 3 years ago

  • 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 (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.
  • 1.7.2 (2021-06-02)
    • Bug Fix: Add ZonedDateTime::normalize(), which must be called by
      the client code after calling a ZonedDateTime mutation function.
    • Migrate PrintStr::getCstr() in AceCommon <=1.4.4 to the shorter
      PrintStr::cstr() in AceCommon >= 1.4.5.
    • Migrate to AceRoutine v1.3.1, which changes
      AceRoutine::coroutineMillis() into non-virtual.
    • Change SystemClock to instantiate from SystemClockTemplate, which
      allows SystemClock::clockMillis() to also become non-virtual. Saves
      20-40 bytes of flash. No discernible changes in CPU time.
AceTime - v1.7.1 - simplify SystemClock getSeconds{Since,To}SyncAttempt() methods

Published by bxparks over 3 years ago

  • 1.7.1 (2021-04-02)
    • Simplify calculation of SystemClock::getSecondsSinceSyncAttempt()
      and SystemClock::getSecondsToSyncAttempt(), which substantially
      simplifies the implementation of SystemClockLoop and
      SystemClockCoroutine.
    • Update tests/auniter.ini to be consistent with my other libraries. Add
      entries for env:teensy32 (which had been supported for a while) and
      env:mkr1000 (which I just received).
  • 1.7 (2021-03-24, TZ DB version 2021a)
    • AceTime now has a
      GitHub Discussion.
      • Use that for general questions and discussions.
      • Reserve GitHub Issues
        for bugs and feature requests.
    • Add tools/compare_noda to compare Noda Time against AceTime.
      • Add --nzd_file flag to compare_noda to allow custom NodaZoneData
        files.
      • Run the Noda Time TzdbCompiler manually to generate custom
        tzdata$(TZ_VERSION).nzd for the specific TZDB version specified in
        the Makefile.
      • Add tests/validation/BasicNodaTest which matches AceTime completely
        from year 2000 until 2050.
      • Add tests/validation/ExtendedNodaTest which maches AceTime
        completely from year 1974 until 2050.
      • Identical results to BasicHinnantDateTest and
        ExtendedHinnantDateTest.
    • Add ace_time::clock::Stm32F1Clock and ace_time::hw::Stm32F1Rtc
      • Specialized classes for the STM32F1 chip, particularly the Blue Pill
        board, using the LSE_CLOCK (low speed external clock).
        • Blue Pill already includes the external 32.768 kHz
          crystal on pins C14 and C15.
      • Alternative to the ace_time::clock::StmRtcClock class, which uses
        the generic STM32RTC library, which does not fully work on the
        STM32F1.
        • STM32RTC forgets the date fields upon power reset, preserving
          only the time fields.
      • These classes write directly into the 32-bit RTC register on the F1,
        allowing AceTime to preserve both date fields and time fields.
    • Massive refactoring of USER_GUIDE.md and README.md for clarity
      • Extract subsections of USER_GUIDE.md into separate docs,
        making USER_GUIDE.md shorter and hopefully more digestable.
      • Rename most of USER_GUIDE.md into docs/date_time_timezone.md.
      • Extract Clock classes into docs/clock_system_clock.md
      • Extract Installation into docs/installation.md.
      • Extract Validation and Testing into docs/validation.md.
      • Extract Comparisons into docs/comparisons.md.
      • Add documentation for StmRtcClock and Stm32F1Clock.
    • Remove virtual destructor from ace_time::clock::Clock class.
      • Saves 618 bytes of flash on 8-bit AVR processors, 328 bytes on SAMD21,
        but only 50-60 bytes on other 32-bit processors.
    • Finish a working implementation of acetz.py.
      • Includes support for fold.
      • Create BasicAcetzTest and ExtendedAcetzTest and verify all zones
        validate.
    • Time zone short names are printed with spaces instead of underscore.
      • Various printShortNameTo() and printShortTo() methods now print
        the short names with the underscore replaced with a space. Example,
        instead of "Los_Angeles", it is now "Los Angeles".
      • It seems to be more reasonable for most time zones.
      • The time zone full name continues to print the entire canonical
        timezone identifier, e.g. "America/Los_Angeles".
      • Applications that need finer control will have to provide their own
        rendering logic.
    • SystemClock
      • Fix SystemClock::forceSync() that crashes if the referenceClock is
        null.
        • Used mostly for debugging and testing, so I doubt anyone ran into
          this.
      • Add methods to retrieve the sync status of SystemClock.
        • getSecondsSinceSyncAttempt()
        • getSecondsToSyncAttempt()
        • `getClockSlew()
        • getSyncStatusCode()
        • See System Clock
          Status

          for details.
      • Potentially Breaking: Move various internal constants in
        SystemClockLoop and SystemClockCoroutine to private.
        • Examples kStatusReady, kStatusSent, kStatusOk`k
        • These were all related to the internal finite state machine which
          should not have been exposed publically.
        • The sync status of SystemClock is now exposed through
          documented public methods described above.
    • NtpClock
      • Add warning that calling analogRead() too often (e.g. using buttons
        on a resistor ladder using AceButton library) on ESP8266 causes the
        WiFi connection to drop after 5-10 seconds.
  • 1.6
    • Remove TimeZone::kTypeBasicManaged and TimeZone::kTypeExtendedManaged
      and merge them into just regular TimeZone::kTypeBasic and
      TimeZone::kTypeExtended.
      • Significantly simplifies the implementation of TimeZone.
      • TimeZone no longer holds a reference to a ZoneProcessorCache, it
        holds only a reference to ZoneProcessor.
      • The binding of TimeZone to its BasicZoneProcessor or
        ExtendedZoneProcessor now happens early, inside the
        BasicZoneManager or the ExtendedZoneManager, instead of delaying
        it to various methods inside the TimeZone through the
        ZoneProcessorCache.
      • This change should be invisible to library clients.
    • Large internal refactoring of ZoneProcessor, no external change
      • Fully templatize BasicZoneProcessor into
        BasicZoneProcessorTemplate, and ExtendedZoneProcessor to
        ExtendedZoneProcessorTemplate.
      • Remove sentinel static ZoneEra anchor record which prevented
        easy templatization.
      • Remove direct dependency to const ZoneInfo*, replacing it with
        generic uintptr_t zoneKey.
      • Insert BrokerFactory indirection layer to provide mapping from a
        generic uintptr_t zoneKey to the corresponding ZoneInfoBroker.
      • Templatized classes now depend only on their respective
        Zone*Broker classes.
      • This change should be invisible to library clients.
    • Fix stale ZoneProcessor binding to TimeZone.
      • A dereferenced nullptr could crash the program if
        TimeZone::toTimeZoneData() was called immediately after calling the TimeZone::forZoneInfo()` factory method.
      • Some accessor methods in TimeZone (getZoneId(), printTo(),
        printShortTo()) could return incorrect values if the number of
        unique TimeZones used by an application is greater than the cache
        SIZE template parameter given to the ZoneManager.
        • The problem occurs because the ZoneProcessorCache will rebind
          a previously allocated ZoneProcessor to another TimeZone when
          it runs out of available processors in the cache.
    • Unlikely Breaking Change: Move ZoneRegistrar.h into internal/.
      • Rename BasicZoneRegistrar to basic::ZoneRegistrar.
      • Rename ExtendedZoneRegistrar to extended::ZoneRegistrar.
      • The class is an implementation detail which is used only by
        BasicZoneManager and ExtendedZoneManager. It was not exposed to
        the end user and should not cause any breaking changes.
    • Add support for Thin Links using optional linkRegistry[] parameter in
      the constructors of BasicZoneManager and ExtendedZoneManager.
      • The zonedb/zone_registry.h and zonedbx/zone_registry.h files
        now contain a kLinkRegistrySize and a LinkEntry kLinkRegistry[]
        array. Each record in the array contains a mapping of linkId to its
        zoneId.
      • The ZoneManager::createForZoneId() method will search the Thin Link
        registry if a zoneId is not found in the Zone registry.
      • See Zones and Links section in the
        USER_GUIDE.md.
    • Breaking Change: Rename ZoneManager::registrySize() to
      zoneRegistrySize().
      • Add ZoneManager::linkRegistrySize() method.
      • A ZoneManager can now hold 2 different registries: the Zone (and Fat
        Link) registry, and the Thin Link registry. So we need to
        distinguish between the 2 registries.
      • See the Default Registries section
        in the USER_GUIDE.md for an explanation of the Zone
        and Link registries.
AceTime - v1.5 - officially support STM32; upgrade to TZ DB 2021a; implement fat Links

Published by bxparks almost 4 years ago

  • 1.5
    • Use binary search for both ZoneManager::createForZoneName() and
      ZoneManager::createForZoneId().
      • Previously, the zone_registry.cpp was sorted by zoneName, so only
        the createForZoneName() could use the binary search. The new
        solution sorts the zone_registry.cpp entries by zoneId instead of
        zoneName. The createForZoneId() can use the binary search
        algorith.
      • The createForZoneName() can also use the binary search because
        the zoneName is converted dynamically to its zoneId using the same
        djb2 hash algorithm used by the tzcompiler.py. If there is a match,
        a final verification against the exact zoneName is performed to make
        sure that there was no hash collision.
      • Updated AutoBenchmark.ino to determine that a binary search on the
        266 zones in zonedb/zone_registry.cpp is 9-10X faster (on average)
        than a linear search through the same list. (Linear search takes ~190
        iterations; binary search takes ~9 iterations.)
    • Upgrade Link entries to be "fat links".
      • Links become essentially identical to Zone entries, with references to
        the same underlying ZoneEra records.
      • Add kZoneAndLinkRegistry[] array in zone_registry.h that contains
        all Links as well as Zones.
      • Add "Zones and Links" section in USER_GUIDE.md.
    • Implement zoneName compression using ace_common::KString.
      • Saves about 1500-2300 bytes for basic zonedb info files, and
        2500-3400 bytes for extended zonedbx info files.
    • Potentially Breaking Change: Remove transitionBufSize from
      ZoneInfo struct, and migrate to kZoneBufSize{xxx} constants in the
      zone_infos.h files.
      • This was used only in validation tests under tests/validation and
        only for Extended{xxx} tests. Saves 1 byte per Zone on 8-bit
        processors, but none on 32-bit processors due to 4-byte alignment.
      • This should have no impact on client code since this field was used
        only for validation testing.
    • API Breaking Change: Replace BasicZone::name() and shortName()
      with printNameTo() and printShortNameTo(). Same with
      ExtendedZone::name() and shortName(), replaced with printNameTo()
      and printShortNameTo().
      • After implementing zoneName compression, it was no longer possible to
        return a simple pointer to the name and shortName without using
        static memory buffers.
      • I expect almost no one to be using the BasicZone and ExtendedZone
        classes, since they are mostly useful for internal algorithms.
      • Client code that needs the old functionality can use
        BasicZone::printNameTo(Print&),
        BasicZone::printShortNameTo(Print&) (similarly for ExtendedZone)
        to print to a ace_common::PrintStr<> object, then extract the
        c-string using PrintStr::getCstr().
    • Update UnixHostDuino 0.4 to EpoxyDuino 0.5.
    • Explicitly blacklist megaAVR boards, and SAMD21 boards using
      arduino:samd Core >= 1.8.10.
      • This allows a helpful message to be shown to the user, instead of the
        pages and pages of compiler errors.
    • Update TZ Database to 2021a.
    • Officially support STM32 and STM32duino after testing on STM32 Blue Pill.
AceTime - v1.4.1 - actually upgrade zonedb and zonedbx files to 2020f

Published by bxparks almost 4 years ago

  • 1.4.1 (2020-12-30, TZDB version 2020f for real)
    • Actually update src/ace_time/zonedb and src/ace_time/zonedbx
      zone info files to 2020f. Oops.
  • 1.4 (2020-12-30, TZ DB version 2020f)
    • Add entry for ManualZoneManager in
      examples/MemoryBenchmark. It seems to need
      between 0'ish to 250 bytes of flash.
    • Add support for creating and handling a TimePeriod error object.
      • Add kMaxPeriodSeconds and kInvalidPeriodSeconds constants.
      • Add forError() factory method.
      • Add error checking to toSeconds() and TimePeriod(seconds)
        constructor.
      • Printing an error object prints <Invalid TimePeriod>.
    • Add support for the STM32RTC clock on an STM32 through the
      ace_time::clock::StmRtcClock class.
      • Currently experimental and untested.
      • I do not have any STM32 boards right now, so I cannot test this code.
      • See #39 for details.
      • Thanks to Anatoli Arkhipenko (arkhipenko@).
    • Add convenience factory methods for creating manual TimeZone objects.
      Saves a lot of typing by avoiding the TimeOffset objects:
      • TimeZone::forHours()
      • TimeZone::forMinutes()
      • TimeZone::forHourMinute()
    • Fix incorrect kTypeXxx constants in ZoneManager.h. Fortunately, the
      numerical values overlapped perfectly, so didn't cause any bugs in actual
      code.
    • USER_GUIDE.md
      • Add documentation about accessing the meta information about the
        zonedb and zonedbx databases:
        • zonedb::kTzDatabaseVersion
        • zonedb::kZoneContext.startYear
        • zonedb::kZoneContext.untilYear
        • zonedbx::kTzDatabaseVersion
        • zonedbx::kZoneContext.startYear
        • zonedbx::kZoneContext.untilYear
      • Add documentation that the ZonedDateTime must always be within
        startYear and untilYear. An error object will be returned outside
        of that range.
    • Update TZ Database from 2020d to version 2020f
    • Update examples/AutoBenchmark to allow auto-generation of ASCII tables,
      which allows auto-generation of the README.md file. Update CPU
      benchmarks for v1.4 from v0.8, since it is much easier to update these
      numbers now. No significant performance change from v0.8.
    • Huge amounts of Python tools refactoring
      • Convert all remaining % string formatting to f-strings.
      • Convert all internal camelCase dictionary keys to snake_case for
        consistency.
      • Finish adding typing info to pass strict mypy checking.
      • Centralize most typing info into data_types/at_types.py.
      • Move various global constants into data_types/at_types.py.
      • Migrate most Arduino specific transformations into artransformer.py.
      • Move offsetCode, deltaCode, atTimeCode, untilTimeCode, rulesDeltaCode
        calculations and various bit-packing rules (e.g. at_time_modifier,
        ntil_time_modifier) into artransformer.py instead of the
        argenerator.py.
      • Include general and platform specific transformations in
        the JSON (zonedb.json or zonedbx.json) files.
      • Make argenerator.py use only the JSON output instead of making
        its own transformations.
      • Produce both LettersMap and LettersPerPolicy in the JSON file.
      • Unify CommentsCollection into CommentsMap using an Iterable
        in Dict[str, Iterable[str]].
      • Unify all transformer results into TransformerResult.
      • Check hash collisions for Link names, in addition to Zone names.
      • Rename test data generator executables to generate_data.* or some
        variations of it, to avoid confusion with unit tests which are often
        named test_xxx.py.
      • Add --input_dir flag to generate_data.cpp to allow the TZ database
        directory to be specified.
      • Add --ignore_buf_size_too_big to workaround a mismatch between
        the estimated Transition buffer size calculated by bufestimator.py
        and the actual buffer size required by ExtendedZoneProcessor.cpp.
      • Add --skip_checkout flag to tzcompiler.py to allow local
        modifications of the TZ database files to be used for code generation.
      • Add --delta_granularity flag to transformer.py to decouple it
        from --offset_granularity, so that the SAVE and RULES
        granularity can be controlled independently from the STDOFF
        granularity. The --until_at_granularity continues to control AT
        and UNTIL.
      • Make output of zinfo.py --debug to be more readable.
      • Remove --generate_zone_strings from tzcompiler.py which removes
        the ability to create zone_strings.{h,cpp}. The storage and
        optimization of strings are implementation details which seem to be
        better handled later in the pipeline.
      • Increase the range of zonedbpy database from the default
        [2000,2050) to [1974, 2050) to allow zinfo.py to handle a larger
        range of queries.
      • Merge --action and --language flags for tzcompiler.py; only
        --language flag needed right now.
      • Rename RulesMap to PoliciesMap, rules_map to policies_map,
        rule_name to policy_name etc. For consistency with ZonesMap,
        zones_map, and zone_name.
      • Add ZoneId hashes to JSON output files.
AceTime - v1.3 - better ZoneId support using ZoneManager interface

Published by bxparks almost 4 years ago

  • 1.3 (2020-11-30, TZ DB version 2020d)
    • Minor tweaks to silence clang++ warnings.
    • Create new ZoneManager interface (pure virtual) which is now the
      non-templatized parent to both BasicZoneManager and
      ExtendedZoneManager. Allows ZoneManager to be passed around
      poloymorphically as a pointer or reference.
    • Fix broken ZoneManager::indexForZoneName() and
      ZoneManager::indexForZoneId() caused by incorrect implementations in
      BasicZoneRegistrar and ExtendedZoneRegistrar.
    • Generate compile-time zoneIds for all zones in the form of
      zonedb::kZoneId{Zone_Name} and zonedbx::kZoneId{Zone_Name} (e.g.
      zonedb::kZoneIdAmerica_Los_Angeles). Can be given directly to
      ZoneManager::createForZoneId().
    • Add constructors to TimeZoneData to allow initializers to set
      union members. Useful for initializing arrays of TimeZoneData.
    • Add ManualZoneManager implementation of ZoneManager which implements
      only createForTimeZoneData(). Useful in applications which support only
      TimeZone::kTypeManual (fixed std and dst offsets) due to memory
      constaints.
    • Add documentation of TimeZoneData, TimeZone::toTimeZoneData(), and
      ZoneManager::createFromTimeZoneData() to USER_GUIDE.md. Looks like I
      added the class in v0.5 but forgot to document it.
    • Implement LocalDateTime::compareTo() using only its components instead
      of internally converting to epochSeconds. Not all LocalDateTime can be
      represented by an epochSeconds, so this change makes the algorithm more
      robust. The semantics of the method should remain unchanged.
    • Update the doxygen docs of the compareTo() methods of LocalDateTime,
      LocalTime, LocalDate, OffsetDateTime and ZonedDateTime to clarify
      the semantics of those operations.
AceTime - v1.2.1 - add Table of Contents to USER_GUIDE.md

Published by bxparks almost 4 years ago

  • 1.2.1 (2020-11-12, TZ DB version 2020d)
    • No functional change in this release. Mostly documentation.
    • Update examples/MemoryBenchmark numbers from v0.8 to v1.2 with
      new auto-generator scripts.
    • Add Table of Contents to USER_GUIDE.md to help navigate the long
      document.
AceTime - v1.2 - migrate low-level common code to AceCommon library

Published by bxparks almost 4 years ago

  • 1.2 (2020-10-31, TZ DB version 2020d)
    • Potentially Breaking: AceTime library now depends on the AceCommon
      library (https://github.com/bxparks/AceCommon) to avoid having to maintain
      multiple copies of various utility functions and classes. The API for most
      (if not all) public classes have not changed. A number of internal helper
      classes have moved to the AceCommon library. If you happen to directly use
      some of these, you need to use the AceCommon library instead.
      • Add dependency to AceCommon to all Makefiles.
      • Add a depends attribute to library.properties.
    • Replace various utlity functions and class with those from AceCommon:
      • class TimingStats
      • incrementMod(), incrementModOffset(), printPad2To(),
        printPad3To()
      • strcmp_PP()
      • strchr_P(), strrchr_P() for ESP8266 and ESP32
      • PrintStr
    • Move common/CrcEeprom.h to AceUtils
      (https://github.com/bxparks/AceUtils) library.
AceTime - 1.1.2 - upgrade to TZDB 2020d

Published by bxparks about 4 years ago

AceTime - 1.1.1 - Upgrade to TZDB version 2020c

Published by bxparks about 4 years ago

  • 1.1.1 (2020-10-18, TZ DB version 2020c)
    • Add documentation for using the PrintStr<N> class from the AceUtils
      library (https://github.com:bxparks/AceUtils) on the various printTo()
      methods. The string content can be retrieved using the
      PrintStr::getCstr() method which returns a normal const char*
      C-string. The PrintStr<N> class replaces an earlier, unreleased version
      that was called CstrPrint<N>.
    • Add 'Validation Tests' GitHub workflow for running
      tests/validation/*Test.
    • Create blacklist.json file for each compare_xxx tools, to disable
      validation checks for DST or abbreviations due to bugs in the 3rd party
      libraries.
    • Add ValidationScope enum to provide better control over whether the
      DST or abbrev fields are validated.
    • Print better diagnostic messages when tests/validation fails in
      BasicTransitionTest and ExtendedTransitionTest classes.
    • Upgrade target version numbers of 3rd party libraries used for
      tests/validation: pytz from 2019.3 to 2020.1, JDK 11.0.6 to 11.0.8.
    • Upgrade to TZDB 2020c.
    • Restrict GitHub Actions workflow to run just BasicHinnantDateTest and
      ExtendedHinnantDateTest, because the other Python and Java tests break
      every time a new TZDB version comes out.
    • Add DEVELOPER.md file containing notes mostly for myself.
AceTime - upgrade to TZ DB version 2020a

Published by bxparks over 4 years ago

  • 1.1 (2020-04-25, TZ DB version 2020a)
    • Fix broken links in README.md.
    • Fix typos in USER_GUIDE.md and update its version number to 1.0 as it
      should have been back in October.
    • Massive refactor of ./tools processing pipeline and update
      validation/tests.
      • Add mypy strict type checking for Python scripts under tools.
      • Funnel validation*.{h,cpp} code generation through a single program
        using a validation_data.json intermediate file.
      • Funnel processing of TZDB output from transformer.py into a single
        tzdbcollector.py which can produce a tzdb.json output.
      • Separate validator.py processing into a distinct section.
    • Add validation tests against Python dateutil library (similar to
      pytz).
    • Update TZ Database version to 2020a that was released on 2020-04-23.
AceTime - 1.0 - graduate to 1.0 with TZ DB version 2019c

Published by bxparks about 5 years ago

  • 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/*Test integration
      tests on-demand, instead of using the zonedb files checked into
      src/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 into
      src/ace_time/zonedb[x].
    • Update src/ace_time/zonedb[x] files to TZ version 2019c.
    • Graduate to version 1.0.
AceTime - 0.8.1 - update SystemClockCoroutine for compatibility with AceRoutine v0.3

Published by bxparks about 5 years ago

  • 0.8.1
    • Update SystemClockCoroutine to be compatible with
      COROUTINE_DELAY_SECONDS() API changed in AceRoutine v0.3.
    • Fix typos and grammar errors in USER_GUIDE.md and README.md.
    • Remove YearMonth abstraction in BasicZoneProcessor, saving 12 bytes
      of flash in WorldClock.