如何在Delphi中使用DST将历史时间戳转换为不同的时区?
发布时间:2020-12-15 04:23:37 所属栏目:大数据 来源:网络整理
导读:我需要在Delphi(Win32)中将历史时间戳从GMT转换为BST.我无法使用操作系统中的当前区域设置进行转换,因为它不具有历史时间的正确夏令时(DST)偏移. 我可以使用VCL API或Win32 API吗? 解决方法 Delphi TZDB可能是有用的.它的主要特点是有一个使用 tz database
我需要在Delphi(Win32)中将历史时间戳从GMT转换为BST.我无法使用操作系统中的当前区域设置进行转换,因为它不具有历史时间的正确夏令时(DST)偏移.
我可以使用VCL API或Win32 API吗? 解决方法
Delphi TZDB可能是有用的.它的主要特点是有一个使用
tz database处理时间的类,如果它包含“足够历史”数据,它将允许您使用UTC作为中介. tz数据库旨在为世界各地的所有时区制定规则,以及自Unix时代以来与UTC相关的闰年,夏令时,日历变更等各种时间变化(午夜,1月1日,1970年).
安装软件包后,使用方法将如下所示: function ConvertFromGMTToBST(const AGMTTime: TDateTime): TDateTime; var tzGMT,tzBST: TTimeZone; UTCTime: TDateTime; begin tzGMT := TBundledTimeZone.GetTimeZone('GMT'); tzBST := TBundledTimeZone.GetTimeZone('BST'); UTCTime := tzGMT.ToUniversalTime(AGMTTime); Result := tzBST.ToLocalTime(UTCTime); end; 以上依赖于一些假设.首先,GMT和BST是tz数据库中的有效别名.如果没有,那么你需要找到最近的城市. (例如America / New_York).第二个是我非常确定我的代码是特定于Delphi XE的. TZDB声称可以使用Delphi 6和更新版本(以及FreePascal),因此对工作的调整应该是次要的. 不幸的是,区域日期和时间非常复杂,特别是如果你在20世纪之前延伸很久. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |