tl;博士
ZonedDateTime // Represent a moment as seen in the wall-clock time used by the people of a particular region (a time zone).
.now( ZoneId.of( "Asia/Kolkata" ) ) // Capture the current moment as seen in the specified time zone. Returns a `ZonedDateTime` object.
.format( // Generate text representing the value of this `ZonedDateTime` object.
DateTimeFormatter // Class controlling the generation of text representing the value of a date-time object.
.ofLocalizedDateTime ( FormatStyle.FULL ) // Automatically localize the string representing this date-time value.
.withLocale ( Locale.FRENCH ) // Specify the human language and cultural norms used in localizing.
) // Return a `String` object.
java.time
Question 中的代码使用麻烦的旧日期时间类,这些类现在是遗留的,被 Java 8 及更高版本中内置的 java.time 类所取代。
区域设置和时区彼此无关。区域设置确定生成 String 以表示日期时间值时使用的人类语言和文化规范。时区确定用于表示时间轴上某个时刻的特定区域的挂钟时间。
Instant
类以 UTC 格式表示时间轴上的某个时刻,分辨率为纳秒(最多九 (9) 位小数)。
Instant instant = Instant.now();
2016-10-12T07:21:00.264Z
应用时区以获取 .我随意选择使用印度时区来显示这一刻。同一时刻,时间轴上的同一点。ZonedDateTime
ZoneId z = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = instant.atZone( z );
2016-10-12T12:51:00.264+05:30[亚洲/加尔各答]
使用魁北克加拿大的区域设置生成字符串。让 java.time 自动本地化字符串。
Locale l = Locale.CANADA_FRENCH;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL ).withLocale ( l );
String output = zdt.format ( f ); // Indian time zone with Québécois presentation/translation.
Mercredi 12 Octobre 2016 12 h 51 IST
关于 java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧旧日期时间类,如java.util.Date
,。Calendar
, & java.text.SimpleDateFormat
.
Joda-Time项目现在处于维护模式,建议迁移到java.time。
要了解更多信息,请参阅 Oracle 教程。搜索 Stack Overflow 以获取许多示例和解释。规格是JSR 310。
从哪里获取 java.time 类?
ThreeTen-Extra 项目通过其他类扩展了 java.time。这个项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
等。