如何在Delphi中使用DST将历史时间戳转换为不同的时区?

2023-12-09

我需要在 Delphi (Win32) 中将历史时间戳从 GMT 转换为 BST。我无法使用操作系统中的当前区域设置进行转换,因为它没有历史时间的正确夏令时 (DST) 偏移量。

是否有我可以使用的 VCL API 或 Win32 API?


德尔福TZDB可能有用。它的主要特点是有一个类可以使用兹数据库,如果它包含“足够历史”的数据,则可以让您使用 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 and BST是 tz 数据库中的有效别名。如果没有,那么您需要找到最近的城市。 (例如。America/New_York)。第二个是我很确定我的代码是特定于 Delphi XE+ 的。 TZDB 声称可以在 Delphi 6 和更新版本(以及 FreePascal)上运行,因此对工作的调整应该很小。

不幸的是,地区日期和时间非常复杂,尤其是如果追溯到 20 世纪之前。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Delphi中使用DST将历史时间戳转换为不同的时区? 的相关文章

随机推荐

  • 运行 Multidexed Espresso .APK

    运行 Espresso 测试时 gradlew connectedDebugAndroidTest 我们遇到了这个问题 com android build api transform TransformException com andro
  • .h 中定义的函数在 .cu 中声明

    我将一个项目分为三个文件夹 src include obj 我正在使用 CImg h 和 cuda h 库 我声明void convolve cimg library CImg
  • 上传的 docx 文件转为 zip

    我目前正在使用 symfony 1 4 并希望允许用户上传 Microsoft Word docx 文件 使用下面的 sfWidgetFormInputFile 小部件和 sfValidatorFile 用户可以使用简单的 Web 表单选择
  • 在 Swift 中将要通过网络发送/接收的日期(绝对时间)转换为数据?

    我正在寻找一种快速生成时间戳的方法 我的 macOS 应用程序会记录一些数据 并用数据创建的时间对其进行标记 然后数据将通过网络发送 如Data 在 iPad 上重建 是否有任何 Swift 类可以生成时间戳 国家标准日期 NSTimeIn
  • 如何使用 future 修复 java lambda 过滤器(缺少 return 语句)

    如何解决java lambda过滤未来集合 我得到了一个 future 集合 并且我想过滤掉集合中返回的错误结果 但是使用 lambda 来报告 缺少 return 语句 我想要得到一个集合看起来像List
  • Bootstrap 3:如何使用推拉将左侧边栏拖放到内容下方

    我正在使用 Bootstrap 3 在移动设备上 我想垂直堆叠所有 div 侧边栏和内容 并将左侧边栏放置在移动 xs 设备上的主容器下方 当前位于左侧边栏的右侧 HTML 看起来像这样 div class container div cl
  • 恢复使用 tf.estimator 训练的模型并通过 feed_dict 提供输入

    我用 tf estimator 训练了 resnet 模型在训练过程中被保存 保存的文件包括 data index and meta 我想加载这个模型并获得新图像的预测 在训练期间将数据输入模型tf data Dataset 我密切关注了
  • 如何保存带有负值的PIL图像

    我正在尝试使用 PIL 保存具有负值的图像 但是 保存后 图像文件的所有负值均被剪裁为 0 from PIL import Image import numpy as np generate random image for demo im
  • 在集成测试中使用命名路由是否合适?

    其中哪一种是编写集成 请求 测试的 正确 方法 it should be successful do get about terms response should be success end it should be successfu
  • 最令人烦恼的解析的目的是什么?

    On 维基百科我找到了这个 A a A 这 可以消除歧义 类的变量定义 A 获取类 的匿名实例A or 返回类型为 的对象的函数的函数声明A 并采用单个 未命名 参数 该参数是返回类型 的函数A 并且不接受任何输入 大多数程序员期望第一个
  • 在数据框中分割日期和时间[重复]

    这个问题在这里已经有答案了 我在数据框中有一个日期格式的列列表201001011200 as Y m d H M 我想把它们分成 Y m d and H M作为日期和时间 我尝试过了as Date data Date origin 1970
  • 强制更新 Cocoa 应用程序主菜单的 NSMenu(嵌套子菜单)

    我插入了一些子菜单作为主菜单的窗口项子菜单 我有一个从 NSObject 继承的对象实例 假设它的类名为 MenuController 并支持 2 个 NSMenuDelegate 方法 菜单中的项目数量 菜单 updateItem atI
  • 承载者代表什么?

    在 jwt 令牌的上下文中 使用了 承载者 一词 我在谷歌上找不到很多关于承载者的信息 我想知道这些术语来自哪里以及它代表什么 为什么它有前缀 为什么它有前缀 因为否则它只是一堆没有任何上下文的随机字符 除了知道它是某种类型的授权的一些 信
  • 调用 ServiceBase.OnStart 和 OnStop...同一个实例?

    所以我有一个用 C 编写的 Windows 服务 服务类源自ServiceBase 并启动和停止服务调用实例方法OnStart and OnStop分别 这是该课程的 SSCE partial class CometService Serv
  • JSP和Servlet之间的通信?

    我有一个与 servlet 后端通信的 jsp 页面 到目前为止 我与该 servlet 通信的方式是通过 getJSON 这是一种 JQuery 方法 如果我想要发回的数据采用 key value 的形式 那么这非常有用 但是 现在我需要
  • 在 iOS 中离线打开和存储加密文档

    我已下载加密文件并可在文件夹中离线查看 我想知道 如何在适当的阅读器中打开它们 因为这些是 MS Office 文档和 Prezi 格式 我想它们必须是未加密的 以便读者可以阅读它们 但在这种情况下如何确保安全 使用哪个文件夹来避免 iCl
  • 从 AJAX POST 响应获取并存储 cookie(来自 Set-Cookie)

    我有一个简单的 jQuery AJAX POST 代码 ajax type POST url AppConstants URLs PROXY data message xhrFields withCredentials true succe
  • 能不能把每一个递归都改成迭代呢?

    Is every递归函数可以转换为迭代吗 递归函数应该具有什么特征才能使用迭代来实现 我一直在尝试使用迭代来定义以下函数 但似乎不行 它应该探索迷宫中的所有路径 节点 任何人都可以使用迭代重写这个吗 如果不可能 为什么不呢 typedef
  • 如何在 swift 中通过通知传递多个值

    如何通过通知发送号码和字符串 let mynumber 1 let mytext mytext NSNotificationCenter defaultCenter postNotificationName refresh object 并
  • 如何在Delphi中使用DST将历史时间戳转换为不同的时区?

    我需要在 Delphi Win32 中将历史时间戳从 GMT 转换为 BST 我无法使用操作系统中的当前区域设置进行转换 因为它没有历史时间的正确夏令时 DST 偏移量 是否有我可以使用的 VCL API 或 Win32 API 德尔福TZ