java.time.ZoneId
旧的日期时间类现在已被遗留,被 java.time 类取代。
代替java.util.TimeZone
,你应该使用ZoneId https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html。用于解析一个正确的时区名称 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones, call ZoneId.of https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#of-java.lang.String-.
ZoneId.of ( "Africa/Casablanca" )
陷阱为ZoneRulesException
如果您传入的名称无法识别,该方法会抛出ZoneRulesException https://docs.oracle.com/javase/8/docs/api/java/time/zone/ZoneRulesException.html.
所以,为了发现拼写错误Asia/Tokyo https://en.wikipedia.org/wiki/Asia/Tokyo as Asia/Toyo
,陷阱为ZoneRulesException https://docs.oracle.com/javase/8/docs/api/java/time/zone/ZoneRulesException.html.
ZoneId z;
try {
z = ZoneId.of ( "Asia/Toyo" ); // Misspell "Asia/Tokyo" as "Asia/Toyo".
} catch ( ZoneRulesException e ) {
System.out.println ( "Oops! Failed to recognize your time zone name. ZoneRulesException message: " + e.getMessage () );
return;
}
ZonedDateTime zdt = ZonedDateTime.now ( z );
看到这个代码在 IdeOne.com 上实时运行 http://ideone.com/WSvaW6.
关于 java.time
The java.time http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html框架内置于 Java 8 及更高版本中。这些课程取代了麻烦的旧课程legacy https://en.wikipedia.org/wiki/Legacy_system日期时间类,例如java.util.Date https://docs.oracle.com/javase/8/docs/api/java/util/Date.html, Calendar https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html, & SimpleDateFormat http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html.
The 乔达时间 http://www.joda.org/joda-time/项目,现在在维护模式 https://en.wikipedia.org/wiki/Maintenance_mode,建议迁移到java.time http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html类。
要了解更多信息,请参阅甲骨文教程 http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310 https://jcp.org/en/jsr/detail?id=310.
从哪里获取 java.time 类?
-
Java SE 8 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_8 and SE 9 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9 and later
- 内置。
- 具有捆绑实现的标准 Java API 的一部分。
- Java 9 添加了一些小功能和修复。
-
Java SE 6 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_6 and SE 7 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_7
- 许多 java.time 功能都向后移植到 Java 6 和 7三十后端口 http://www.threeten.org/threetenbp/.
-
Android https://en.wikipedia.org/wiki/Android_(operating_system)
- The 三十ABP https://github.com/JakeWharton/ThreeTenABP项目适应三十后端口(如上所述)专门针对 Android。
- See 如何使用 ThreeTenABP... https://stackoverflow.com/q/38922754/642706.
The 三十额外 http://www.threeten.org/threeten-extra/项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/Interval.html, YearWeek http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearWeek.html, YearQuarter http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearQuarter.html, and more http://www.threeten.org/threeten-extra/apidocs/index.html.