gpt4 book ai didi

java - HOUR_OF_DAY 为值 0 和 1 设置相同的小时

转载 作者:行者123 更新时间:2023-12-01 06:49:33 32 4
gpt4 key购买 nike

我有一个关于 java 时区的棘手问题(至少对我来说)。我将从一个按预期工作的示例开始:

TimeZone tz = TimeZone.getDefault();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
simpleDateFormat.setTimeZone(tz);
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(tz);

calendar.set(Calendar.HOUR_OF_DAY, 0);
System.out.println("0: " + simpleDateFormat.format(calendar.getTime()));

calendar.set(Calendar.HOUR_OF_DAY, 1);
System.out.println("1: " + simpleDateFormat.format(calendar.getTime()));

calendar.set(Calendar.HOUR_OF_DAY, 2);
System.out.println("2: " + simpleDateFormat.format(calendar.getTime()));

输出:

0 4/28/17 12:27 AM
1: 4/28/17 1:27 AM
2: 4/28/17 2:27 AM

现在来一点魔法:

TimeZone tz = TimeZone.getTimeZone("Africa/Cairo");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
simpleDateFormat.setTimeZone(tz);
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(tz);

calendar.set(Calendar.HOUR_OF_DAY, 0);
System.out.println("0: " + simpleDateFormat.format(calendar.getTime()));

calendar.set(Calendar.HOUR_OF_DAY, 1);
System.out.println("1: " + simpleDateFormat.format(calendar.getTime()));

calendar.set(Calendar.HOUR_OF_DAY, 2);
System.out.println("2: " + simpleDateFormat.format(calendar.getTime()));

输出:

0: 4/28/17 1:31 AM
1: 4/28/17 1:31 AM
2: 4/28/17 2:31 AM

有人可以解释一下为什么值 0 和 1 的 HOUR_OF_DAY 将小时设置为特定时区的相同值吗?

最佳答案

您的计算机具有旧版本的时区数据,其中埃及会将时钟调快于 2017 年 4 月 28 日开始的本地时间午夜。因此 12:31am 不会存在,Java 会向前跳过改为一小时1

2016 年 7 月 5 日,IANA 时区数据 2016f 发布,非洲/开罗时区更改为从该时点起不再遵守夏令时。 (这是一个非常晚的公告,因为下一次更改是 2016 年 7 月 8 日。)

您可以在 http://nodatime.github.io/tzvalidate/ 处查看不同版本的 IANA 数据中每个 IANA 时区的所有转换。 。 (免责声明:我构建了该页面。我启动了 tzvalidate 项目来验证不同的日期/时间库是否以相同的方式理解时区数据。)

<小时/>

1 我认为 API 应该强制您说明在这种情况下您想要发生的情况,但我不会详细讨论 所有问题 java.util.Calendar在这里...

关于java - HOUR_OF_DAY 为值 0 和 1 设置相同的小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43684054/

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