通过在java中提供年份来确定下一个夏令时[重复]

Posted

技术标签:

【中文标题】通过在java中提供年份来确定下一个夏令时[重复]【英文标题】:Determining the next daylight saving day by providing year in java [duplicate] 【发布时间】:2021-04-26 13:30:59 【问题描述】:

我想确定下一个夏令时的日期,但我只能确定到目前为止我是 java 新手的任何日期

public void iGenerateDSTOfFormatDaysFromToday(String format, int delta,String date) throws Throwable 
    SimpleDateFormat dateFormat = new SimpleDateFormat(format);
    Date currentDate = new Date();
    String Date = dateFormat.format(addDays(currentDate,delta));
    SetToGlobal.run(Date,date);

【问题讨论】:

【参考方案1】:

我想确定下一个夏令时的日期

这不是一个可以回答的问题。夏令时不是那样工作的。一个明智的问题是:

在当前地区时钟改变的第二天是什么时候”或者可能是“阿姆斯特丹时钟改变的第二天是什么时候”。 p>

世界上没有一个全球性的“今天是这一天”。

SimpleDateFormat

这是过时的旧 API,您真的非常不想用它来回答这个问题。在 java 中处理日期的正确方法是使用 java.time 包。

ZoneId ams = ZoneId.of("Europe/Amsterdam");
ZoneOffsetTransition trans = ams.getRules().nextTransition(Instant.now());
LocalDateTime date = trans.getDateTimeBefore();
System.out.println(date);

> 2021-03-28T02:00

下次阿姆斯特丹调换时钟时,将是 2021 年 3 月 28 日晚上 2 点。

一些事实:

有些区域不会在晚上 02:00 切换,而是在其他时间切换。 一些区域将很快停止切换(例如欧洲大部分地区)。 当您在美国的一个州内沿单条直线行驶时,您可以穿越 8 个(或者可能更多,我不记得了)区域,因为(一些)预订不遵守夏令时,但其余的国家有。 国家/地区有时会提前几周宣布过渡时间或提前几周。 有时,过渡不会在 1 小时内发生变化,而是会在 24 小时内发生变化(例如,当伯罗尼西亚群岛决定他们宁愿位于国际日期变更线的另一侧时)。

【讨论】:

对不起,但我不明白这句话:一些区域将很快停止切换(例如欧洲大部分地区)。你的意思是他们将有夏令时全年无休? @Abra 是的。他们在 2020 年和可能在 2021 年每年将时钟倒转一次,但很快就会停止这样做,欧盟委员会通过了一项决议,让欧洲完全停止切换时钟。 另请注意:更改是由操作系统或语言本身提供的,因此您可能有一个旧数据库(有些国家在更改前一周宣布了更改,在这种情况下为 OTOH该地区知道混乱,因为每个系统都有不同的观点)。它只是在所有基于 UTC 的时间中同时添加的“闰秒”。 (但闰秒也可能很快消失)。欧盟注意事项:每个国家/地区都可以决定使用哪个时间(常规、日光)[并且因地区而异] @Abra 据我了解,欧盟只是决定停止切换。然后每个成员国将不得不决定是全年使用标准时间还是全年使用夏令时 (DST)。据我所知,大多数成员还没有决定。我们可能会在短时间内再次更改规则。 我提到欧盟的事情是为了强调回答“下一个过渡日是什么时候”这个问题,[A] 查询操作系统或其他一些自动更新的数据库,或者 [B] 将给出一个很多错误的答案。

以上是关于通过在java中提供年份来确定下一个夏令时[重复]的主要内容,如果未能解决你的问题,请参考以下文章

关于JAVA虚拟机内存

java虚拟机

字符串匹配(KMP)算法及Java实现

一文看懂JVM内存区域分布与作用

一文看懂JVM内存区域分布与作用

如何在没有 Joda Time 的情况下在 Java 7 中正确处理夏令时?