PascalTZ stands for "Pascal Time Zone". It allows you to convert between local times in various time zones and GMT/UTC, taking into account historical changes to time zone rules. PascalTZ uses the Time Zone Database (often called tz or zoneinfo) to determine how to correctly adjust time for various time zones. The correctness of time zone conversions in future relies on using an up to date database. Beware, time zone rules may be changed by governments around the world, sometimes with a very short notice.
PascalTZ component can be used in pure FPC projects or installed as a design and runtime package in Lazarus IDE. It also comes with a testing framework, a collection of time zone conversion test vectors and test cases for internal functions.
More information can be found at GitHub:PascalTZ.
uses SysUtils, DateUtils, uPascalTZ; var PascalTZ: TPascalTZ; DateTime: TDateTime; begin PascalTZ := TPascalTZ.Create; // Load time zone database from "tzdata" directory // Download from: https://www.iana.org/time-zones PascalTZ.DatabasePath := 'tzdata'; // Current local and UTC time DateTime := Now; WriteLn('Local time: ', DateTimeToStr(DateTime)); DateTime := LocalTimeToUniversal(DateTime); WriteLn('UTC time: ', DateTimeToStr(DateTime)); // Convert current time to Paris time DateTime := PascalTZ.GMTToLocalTime(DateTime, 'Europe/Paris'); WriteLn('Time in Paris: ', DateTimeToStr(DateTime)); // Convert Paris time to Chicago time DateTime := PascalTZ.Convert(DateTime, 'Europe/Paris', 'America/Chicago'); WriteLn('Time in Chicago: ', DateTimeToStr(DateTime)); // Check if a time zone exists WriteLn('Africa/Lagos exists? ', PascalTZ.TimeZoneExists('Africa/Lagos')); WriteLn('Australia/Darwin exists? ', PascalTZ.TimeZoneExists('Australia/Darwin')); PascalTZ.Free; end.
Bug reports and suggestions can be logged at GitHub:PascalTZ issues.
Since 2.6.2, FPC has the functions
UniversalTimeToLocal in the dateutils unit to convert between local time and UTC time. These functions can be useful and an alternative for PascalTZ if you are not interested in historical/future date/times (i.e. the functions use current daylight saving time etc to convert to/from UTC time). These functions do allow for specifying manual offsets against UTC, but then you would need to keep track of those offsets - which PascalTZ does for you.