加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在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世纪之前延伸很久.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读