gpt4 book ai didi

java - 使用 Java 日历时忽略 DST

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:54 26 4
gpt4 key购买 nike

我有一个绘制时间序列图的 GUI。用户通过在文本框中输入值来输入他们想要绘图的日期。例如,如果他们输入 25/07/13 22:0026/07/13 00:00,图表应该绘制来自25 日 22:00:00 至次日凌晨 00:00:59。用户输入的时间被解析为 Calendar 对象。

我的问题来自 DST。

用户不关心 DST,所以他们只想看到这两个时间之间的图表。但是,Calendar 对象确实关心 DST,因此我的“结束”日期当前不是 00:00,而是 01:00。 (我在伦敦,我们目前是 GMT + 1 小时 DST)。

我想在绘制图表时有效地忽略 DST 并表现得好像一切都是 GMT + 0。

我该怎么做?

最佳答案

感谢大家的回答,他们帮助我解决了这个问题。这归结为我同时使用 Calendar 对象来表示和存储数据,以及使用 epoch 来进行时间计算。

事实证明,Calendar set() 方法会理所当然地考虑 DST。因此,当我解析用户输入的文本框中的时间值,并对每个单独的 Calendar 字段使用 set() 时,Calendar对象将根据历史数据知道您刚设置的日期是否应用夏令时。因此,它可以理解您的意思,例如 GMT+1,即使您没有意识到这一点(因为,坦率地说,谁知道?!)。

但是,当您执行 getTimeInMillis() 时,返回的 epoch 没有时区或 DST 的概念,因此要与当前时区,如果适用,您必须将 DST 手动应用到返回的 epoch。相反,当您在 Calendar 对象上使用 setTimeInMillis() 时,假设您输入的时间是 GMT+0,但是如果epoch 是当前已应用 DST 的日期,Calendar 对象会为您添加它,这意味着您距离您认为的时间还有 +1 小时。要解决此问题,您需要在将 epoch 设置到日历中之前,在必要时再次减去 DST。

所有这些混淆在日期界限上尤为重要,尤其是如果您像我一样使用日期解决方案。

关于java - 使用 Java 日历时忽略 DST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17854931/

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