libstdc++: Implement zic writezone merge optimization
Optimize timezone data by merging adjacent zones with similar transitions.
This change optimizes timezone data by implementing a merge optimization for zic. When two adjacent zones have different offsets but the new zone’s rule set includes a transition within a specific backward jump window, zic now folds that rule into the boundary itself. This ensures a single transition is emitted, starting with the post-rule save value rather than a brief pre-rule save period, improving accuracy for historical timezone boundaries.
In Details
This patch enhances the zic tool within libstdc++ by implementing a "writezone merge" optimization. It addresses complex timezone boundary transitions where adjacent zones have differing offsets and DST rules fire near the boundary. The new logic computes a merge_window based on the offset difference and applies the rule transition at the boundary itself, preventing the emission of redundant or incorrect offset periods. This logic also applies during DST span re-entry.
This applies to the zic binary and its internal data structures for processing timezone transition rules.
- zic
- The timezone compiler that processes timezone source files and creates timezone data files used by libraries and applications.
- libstdc++
- The standard C++ library implementation used by GCC. It includes support for various language features and a timezone database.
- DST
- Daylight Saving Time, a system of adjusting clocks forward during warmer months so that darkness falls at a later hour of the day.