gpt4 book ai didi

Java DST 变更问题

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:59 26 4
gpt4 key购买 nike

我发现了有关 Java DST 更改的问题。当 DST(夏令时)发生的确切时刻时,特定时间可能会出现两次。

例如,对于 America/Sao_Paulo 时区,它从 2016 年 2 月 21 日星期日 00:00:00 向后更改一小时到 2016 年 2 月 20 日星期六 23:00:00。23:00 时间当天出现两次。

在我的用例中,我想进行第二次。例如,当我想要这一天的数据时,我实际上是指完整的这一天(即使它可能包含25小时)。

但在我看来,Java 似乎占据了这一刻的第一次。

示例:

@Test
public void testDSTChange() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

TimeZone tz = TimeZone.getTimeZone("America/Sao_Paulo");

long dateInput = sdf.parse("2016-02-20T23:00:00").getTime();
long dateUTC = dateInput - tz.getOffset(dateInput);

long dateInput2 = sdf.parse("2016-02-21T02:00:00").getTime();
long dateUTC2 = dateInput2 - tz.getOffset(dateInput2);

System.out.println("Difference: " + (dateUTC2 - dateUTC) / 3600 / 1000);

}

在这个例子中,它显示这两个日期之间的差异是 4 小时,而不是我预期的 3 小时。所以我想知道是否还有其他方法可以做到这一点?

最佳答案

嗯,当夏令时向后改变时,夏令时改变的时间会出现两次,这是没有办法解决的。可能还有另一种方法,但让我提出一个建议,内部使用 UTC 时间 (GMT),它内部没有 DST,在输出时转换为本地时间(挂钟时间)仅用于显示目的。您再也不用担心这个问题了。

关于Java DST 变更问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42346822/

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