在Java中,有两个选项支持日间节能功能。 1. TimeZone 2. ZoneId
哪个类更好用? DST每年都会有所不同。 Java类如何为搜索时区和每年维护这些配置? DST(zoneId.getRules()。isDaylightSavings(instant))的最大日期或年份是多少?
java.time.ZoneId
使用ZoneId
和ZoneRules
,它是现代java.time类的一部分。
避免使用TimeZone
,这是可靠的遗留日期时间类的一部分,这些类通过JSR 310的采用而过时。
时区信息在存储在JVM中的tzdata中定义。如果您关注的区域正在发生变化,请务必更新。
DST(zoneId.getRules()。isDaylightSavings(instant))的最大日期或年份是多少?
询问未来夏令时(DST)的最大日期是错误的。
特定区域的人员使用的偏移的未来变化,例如夏令时(DST)将根据当前已知的规则无限地计算到将来。
诀窍在于,世界各地的政治家都表现出了重新定义各自时区的倾向。这种情况比您想象的更频繁。因此,我们可能想要规划未来调度的规则实际上并不可知,因为它们是由反复无常的人而不是自然界定的。
这就是为什么你不应该预约未来的约会。而是使用不确定的LocalDateTime
类和单独存储的ZoneId
。在计算时间表时,将ZoneId
应用于LocalDateTime
以获得一个特定时刻的ZonedDateTime
对象。这已经在Stack Overflow上多次讨论,因此请搜索更多信息和代码示例。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.Date
,Calendar
和SimpleDateFormat
。
要了解更多信息,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规格是JSR 310。
现在在Joda-Time的maintenance mode项目建议迁移到java.time班。
您可以直接与数据库交换java.time对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。你可能会在这里找到一些有用的类,如Interval
,YearWeek
,YearQuarter
和more。