tl; dr
ZoneId.of( "America/Montreal" ) // Represent a specific time zone, the history of past, present, and future changes to the offset-from-UTC used by the people of a certain region.
.getRules() // Obtain the list of those changes in offset.
.isDaylightSavings( // See if the people of this region are observing Daylight Saving Time at a specific moment.
Instant.now() // Specify the moment. Here we capture the current moment at runtime.
) // Returns a boolean.
java.time
这是mamboking的正确Answer的现代java.time(请参见教程)版本。
ZoneId代表时区。 该类知道告诉DST是否适用于特定时区的规则。
YearQuarter类为一个时区建模了所有历史和未来过渡。
YearQuarter是UTC时间轴上的时刻。
将YearQuarter应用到ZonedDateTime的结果是YearQuarter。
示例代码:
ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );
…
ZoneId z = now.getZone();
ZoneRules zoneRules = z.getRules();
Boolean isDst = zoneRules.isDaylightSavings( now.toInstant() );
请注意,在最后一行中,我们如何通过简单调用YearQuarter从ZonedDateTime对象中提取YearQuarter对象。
关于java.time
java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的传统日期时间类,例如YearQuarter、YearQuarter和YearQuarter。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。 并在Stack Overflow中搜索许多示例和说明。 规格为JSR 310。
您可以直接与数据库交换java.time对象。 使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。 不需要字符串,也不需要YearQuarter类。
在哪里获取java.time类?
Java SE 8,Java SE 9,Java SE 10,Java SE 11和更高版本-标准Java API的一部分,具有捆绑的实现。Java 9添加了一些次要功能和修复。
Java SE 6和Java SE 7大多数Java.time功能都在ThreeTen-Backport中反向移植到Java 6和7。
安卓系统更高版本的Android捆绑了java.time类的实现。
对于早期的Android(<26),ThreeTenABP项目改编了ThreeTen-Backport(如上所述)。 请参阅如何使用ThreeTenABP…。
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是将来可能向java.time添加内容的试验场。 您可能会在这里找到一些有用的类,例如YearQuarter,YearQuarter,YearQuarter等。