gpt4 book ai didi

delphi - Delphi NOW 函数的结果如何受 "Adjust clock for daylight saving changes"选项的影响

转载 作者:行者123 更新时间:2023-12-03 15:26:08 26 4
gpt4 key购买 nike

我意识到这个问题可以通过编写一些测试代码来回答。我并不懒惰,我只是认为答案可能普遍有用。

我有一个应用程序生成了大量数据,其中的记录带有本地时间(由 NOW 例程返回)。我们在夏令时的进出转换方面遇到了障碍 - 即,当我们更改为夏令时时,会缺少一个小时,而当我们退出夏令时时,会重复一个小时。这会导致假设日期排序记录的操作出现问题。

该应用程序已被更改,因此可以使用 UTC 中的所有日期时间,但我将能够显示 UTC 或本地时间的日期时间。我还必须处理以本地时间存储的日期时间,并确保它们正确地转换为 UTC。这很棘手,因为日期时间可能是在 DST 生效时存储的,因此在一般情况下,我需要能够确定任何随机日期是否在 DST 期间内或之外。当然,有一小时的日期时间是不明确的,可能是夏令时结束前的最后一小时,也可能是夏令时结束后的第一个小时。没有办法解决这个问题。

在对更改进行编码时,我想知道 NOW 调用的结果。它在内部调用 GetLocalTime。当您处于 DST 期间,但“根据夏令时变化调整时钟”选项已关闭时,GetLocalTime(和 NOW)会返回什么?

如何编写一个例程,无论“调整夏令时变化的时钟”是关闭还是打开,都返回 DST 周期内的当前日期时间(应用了 DST 偏差)?

最佳答案

我认为你不能轻易解决你的问题。
变量太多:

  • 存储的时间戳
  • 您所在的时区
  • 不断变化的时区规则
  • 确认这些时区规则在您使用的所有设备上都是准确的(即每个人都始终应用补丁)
  • 您的时钟不准确

有一个Delphi TZDB project这可以帮助您了解时区规则。

我认为不依赖上述所有变量,而是存储三个字段更实用:

  • 本地格式的时间戳
  • 当前时区
  • UTC 格式的时间戳

您对第三个字段执行排序,并显示前两个字段。

--杰罗恩

关于delphi - Delphi NOW 函数的结果如何受 "Adjust clock for daylight saving changes"选项的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com