After a few weeks of intense rewrites and tests I am finally proud to release TZDB 2.0 (2019b) released.
:warning: This is a breaking release. You might need to fix your code after the update.
TBudledTimeZoneno longer derives from
TTimeZoneon Delphi. This has finally freed me from having to implement crooked functionality that fits into the Delphi model. Also resulted in much needed simplification of the code base.
- Implementation now uses generic classes on both Delphi and FreePascal. This should ensure compatibility with future version of Delphi. As a result, I have dropped support for versions of Delphi pre-XP. Minimum supported FreePascal version is 3.0.
- Rewrote internals to use year segments for all operations. A year is now being split internally into distinct time segments. Each operation now only has to find the segment that describes a time and then use its meta-data. Before this change, each operation would have its own quirks and implementation details.
GetYearBreakdownallows pulling all time segments for a given year. No more looping by second required!
DbVersionproperty allows checking the IANA DB version.
- General fixes for exotic time zones such as
- Fixes for zones with negative DST offsets such as
- … and more fixes!
- Added special build script that allowed me to combine the three files into
TZDB.pasfile that is available in the
/dist/TZDB.paspath in root. Simply drop that unit into your project and you’re good to go!
This concludes my TZDB “intervention” for a while. I think the current version is quite good and should do its job well into next years.
The latest source code is available here.