莱昂布洛伊的答案是正确的,也是至关重要的。我只是在翻译取代Joda-Time项目的java.time类。
java.time
特定时刻
对于时间轴上的特定时刻:
这些都取代了Joda-Time中的&class。这些java.time类的分辨率都是纳秒,而Joda-Time使用的毫秒。Instant
DateTime
午夜与一天的开始
对于午夜,Joda-Time项目得出结论,“午夜”是一个模糊且无用的概念。与午夜相关的课程和午夜在后来的Joda-Time版本中都被弃用,取而代之的是“一天中的第一刻”的实际概念。
java.time课程也上了同样的课,使用了“一天中的第一刻”方法。在 java.time 类(如 .atStartOfDay
LocalDate
永远不要假设一天从00:00开始。夏令时 (DST) 等异常情况意味着一天可能在其他时间(如 01:00)开始。
ZonedDateTime zdt =
LocalDate.of( 2017 , Month.MARCH , 12 ) // Instantiate a date-only value without time zone.
.atStartOfDay( ZoneId.of( "America/Havana" ) ) ; // Cuba jumps from 00:00 to 01:00 on Spring DST cut-over.
例如,了解古巴如何在春季夏令时切换的凌晨 1 点开始新的一天。
zdt: 2017-03-12T01:00-04:00[美国/哈瓦那]
未分区
要表示大约26-27小时范围内可能时刻的模糊概念,而不是时间轴上的实际时刻,请使用 。此类故意缺少任何与 UTC 或时区的偏移量。LocalDateTime
LocalDateTime ldt = LocalDateTime.of( 2017 , Month.JANUARY , 23 , 1 , 2 , 3 , 0 ) ;
如果您的业务环境暗示了特定的时区,则可以应用它来获得 .ZonedDateTime
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ; // Determine a specific point on timeline by providing the context of a time zone.
关于 java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧旧日期时间类,如java.util.Date
,Calendar
和SimpleDateFormat
。
Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。
要了解更多信息,请参阅 Oracle 教程。搜索 Stack Overflow 以获取许多示例和解释。规格是JSR 310。
从哪里获取 java.time 类?
ThreeTen-Extra 项目通过其他类扩展了 java.time。这个项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
等。