Skip to content

Commit 3e58e09

Browse files
authored
Merge pull request #115 from bxparks/develop
merge 2.3.0 into master
2 parents 403f08e + abcc483 commit 3e58e09

File tree

1,037 files changed

+248177
-77592
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,037 files changed

+248177
-77592
lines changed

.github/workflows/validation.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,19 @@ jobs:
6161
- name: Build Compare tools
6262
run: |
6363
make -C ../acetimec/src
64+
make -C ../AceTimeValidation/tools/compare_acetime
6465
make -C ../AceTimeValidation/tools/compare_acetimec
6566
make -C ../AceTimeValidation/tools/compare_libc
6667
make -C ../AceTimeValidation/tools/compare_hinnant
6768
68-
# Run the tests in AceTimeValidations (HinnantBasicTest,
69-
# HinnantExtendedTest, AcetzBasicTest, AcetzExtendedTest). We don't run the
70-
# others because when a new TZDB version comes out, the Python zoneinfo,
71-
# Python pytz, Python dateutil, and Java validation tests will fail because
72-
# they depend on the obsolete TZ database on the host Operating System. The
73-
# 'make validations' will also compile the binary in
74-
# AceTimeValidation/compare_cpp/ as necessary.
69+
# Run the 'tests' target in AceTimeValidations which runs HinnantBasicTest,
70+
# HinnantExtendedTest, AcetzBasicTest, and AcetzExtendedTest. We don't run
71+
# the others because when a new TZDB version comes out, the Python
72+
# zoneinfo, Python pytz, Python dateutil, Java tests, and others will fail
73+
# because they depend on the obsolete TZ database on the host Operating
74+
# System.
7575
- name: AceTimeValidation
7676
run: |
7777
cd ../AceTimeValidation
78-
make -C tests tests
78+
make -j2 -C tests tests
7979
make -C tests runtests

CHANGELOG.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,79 @@
11
# Changelog
22

33
* Unreleased
4+
* 2.3.0 (2023-06-27, TZDB version 2023c)
5+
* Create [CustomZoneRegistry](examples/CustomZoneRegistry/) example
6+
to illustrate how to use a custom registry.
7+
* Update `BasicZoneManager` to detect gaps.
8+
* Allows `AceTimeValidation/validation` tests to pass.
9+
* Still not able to distinguish between exact and overlap though.
10+
* Allow multi-character `ZoneRule.letter` in `BasicZoneProcessor`.
11+
* Regenerate `zonedb` which enables 2 more zones: `/Africa/Windhoek`,
12+
and `America/Belize`
13+
* Increases `zonedb` by 150-200 bytes.
14+
* Rename `BrokerFactory` to `ZoneInfoStore` for better self-documentation.
15+
* This is an internal implementation detail. Downstream clients should
16+
not be affected.
17+
* `ZoneContext`
18+
* Move `ZoneContext`, `letters[]`, `fragments[]` into PROGMEM.
19+
* Move `zonedbXxx::kTzDatabaseVersion` string into PROGMEM, and change
20+
type to `const __FlashString*`.
21+
* Create `ZoneContextBroker` around `ZoneContext`, for consistency
22+
with all other zoneinfo data structures. Merge `ZoneContext.h` into
23+
`ZoneInfo.h`.
24+
* Add `startYearAccurate` and `untilYearAccurate` to `ZoneContext` which
25+
define the interval of accurate transitions.
26+
* Saves around 150-200 bytes of RAM on AVR processors,
27+
200-350 bytes of RAM on ESP8266.
28+
* Cleanly separate zoneinfo storage classes from their brokers classes.
29+
* Three storage implementations instead of one: `zoneinfolow`,
30+
`zoneinfomid`, `zoneinfohigh`, supporting low, middle, and high time
31+
resolutions.
32+
* `zoneinfohigh` was created to support `CompleteZoneProcessor`,
33+
`CompleteZoneManager` and the `zonedbc` database.
34+
* `zoneinfomid` initially used in `ExtendedZoneProcessor`, but now
35+
unused.
36+
* Merge `zoneinfo/ZonePolicy.h` into `zoneinfo/ZoneInfo.h`.
37+
* Convert structs in `zoneinfo/ZoneInfo.inc` into templates, with
38+
synthetic `typename S` selector. Merge `ZoneInfo.inc` into
39+
`ZoneInfo.h`.
40+
* Support timezones before 1972 using `CompleteZoneManager`,
41+
`CompleteZoneProcessor`, and `zonedbc` database
42+
* Before standardizing on UTC around 1970, many timezones had local
43+
times offsets from UTC which require one-second resolution instead of
44+
one-minute resolution. This requires changing many internal variables
45+
from `int16_t` to `int32_t`.
46+
* Change `TimeOffset` to support one-second resolution using `int32_t`.
47+
* Rename `BasicZone::stdOffseMinutes()` to `BasicZone::stdOffset()`
48+
which returns a `TimeOffset` object.
49+
* Rename `ExtendedZone::stdOffseMinutes()` to
50+
`ExtendedZone::stdOffset()` which returns a `TimeOffset` object.
51+
* Leave `BasicZoneProcessor` using one-minute resolution because its
52+
algorithm has an inherent limitations which cannot handle many
53+
timezones before 1972, so no need to convert `int16_t` to `int32_t`
54+
fields.
55+
* Add `CompleteZoneManager`, `CompleteZoneProcessor`,
56+
`CompleteZoneProcessorCache`, `CompleteZone`
57+
* Add `zonedbc` database which is valid from `[1800,10000)`, which
58+
includes all transitions in the TZDB since the first transition is
59+
1844.
60+
* Add `scope=complete` to access the `zonedbc` database.
61+
* Zone Processor with graceful degradation
62+
* Remove range checks against `ZoneContext.startYear()` and
63+
`ZoneContext.untilYear()`
64+
* Replace with `LocalDate::kMinYear` and `LocalDate::kMaxYear`, mostly
65+
for formatting reasons (prevent negative
66+
years, and years with more than 4 digits).
67+
* The zone processors will always return something reasonble across the
68+
entire `int16_t` range.
69+
* Only the accuracy suffers outside of the `startYearAccurate()` and
70+
`untilYearAccurate()` limits.
71+
* Along with v2.2 which always generates anchor rules for all zone
72+
policies, the `startYearAccureate()` and `untilYearAccurate()` allows
73+
for graceful degradation of classes like `ZonedDateTime` for years
74+
outside of this accuracy range.
75+
* Rename `src/tzonedb*` directories
76+
* to `src/zonedb*testing` for consistency with other acetime libraries
477
* 2.2.3 (2023-05-31, TZDB version 2023c)
578
* Update `ace_time/testing/*` classes to support splitting the test data
679
into 2 separate lists: `transitions` and `samples`.

0 commit comments

Comments
 (0)