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

Delphi NOW功能的结果如何受“调整夏令时变化时钟”选项的影响

发布时间:2020-12-15 09:24:14 所属栏目:大数据 来源:网络整理
导读:我意识到这个问题可以通过编写一些测试代码来解决.我不是懒惰,我只是认为答案通常很有用. 我有一个应用程序,它生成了大量数据,其中包含用本地时间标记的记录(由NOW例程返回).我们遇到了夏令时转换的障碍 – 即当我们改为DST时会丢失一个小时,而当我们退出DST
我意识到这个问题可以通过编写一些测试代码来解决.我不是懒惰,我只是认为答案通常很有用.

我有一个应用程序,它生成了大量数据,其中包含用本地时间标记的记录(由NOW例程返回).我们遇到了夏令时转换的障碍 – 即当我们改为DST时会丢失一个小时,而当我们退出DST时会重复一个小时.这会导致假定日期排序记录的操作出现问题.

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

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

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

解决方法

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

>存储的时间戳
>你所在的时区
>不断变化的时区规则
>确认这些时区规则对您使用的所有设备都是准确的(即每个人总是应用他们的补丁)
>你的时钟不准确

有一个Delphi TZDB project可以帮助您制定时区规则.

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

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

您在第三个字段上执行排序,并显示前两个字段.

–jeroen

(编辑:李大同)

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

    推荐文章
      热点阅读