Java Day Light Saving(TimeZone / ZoneId)支持未来日期/年

问题描述 投票:1回答:1

在Java中,有两个选项支持日间节能功能。 1. TimeZone 2. ZoneId

哪个类更好用? DST每年都会有所不同。 Java类如何为搜索时区和每年维护这些配置? DST(zoneId.getRules()。isDaylightSavings(instant))的最大日期或年份是多少?

java date timezone dst zoneddatetime
1个回答
3
投票

java.time.ZoneId

使用ZoneIdZoneRules,它是现代java.time类的一部分。

避免使用TimeZone,这是可靠的遗留日期时间类的一部分,这些类通过JSR 310的采用而过时。

tzdata

时区信息在存储在JVM中的tzdata中定义。如果您关注的区域正在发生变化,请务必更新。

Zones change

DST(zoneId.getRules()。isDaylightSavings(instant))的最大日期或年份是多少?

询问未来夏令时(DST)的最大日期是错误的。

特定区域的人员使用的偏移的未来变化,例如夏令时(DST)将根据当前已知的规则无限地计算到将来。

诀窍在于,世界各地的政治家都表现出了重新定义各自时区的倾向。这种情况比您想象的更频繁。因此,我们可能想要规划未来调度的规则实际上并不可知,因为它们是由反复无常的人而不是自然界定的。

这就是为什么你不应该预约未来的约会。而是使用不确定的LocalDateTime类和单独存储的ZoneId。在计算时间表时,将ZoneId应用于LocalDateTime以获得一个特定时刻的ZonedDateTime对象。这已经在Stack Overflow上多次讨论,因此请搜索更多信息和代码示例。


About java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规格是JSR 310

现在在Joda-Timemaintenance mode项目建议迁移到java.time班。

您可以直接与数据库交换java.time对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。你可能会在这里找到一些有用的类,如IntervalYearWeekYearQuartermore

© www.soinside.com 2019 - 2024. All rights reserved.