该类java.util.Date
是旧的数据时间类的一部分,这些类设计不良、混乱且麻烦。避开他们。
而是使用 java.time 类。
java.time
java.time框架内置于 Java 8 及更高版本中。这些类取代了旧的麻烦的日期时间类,例如java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
。Joda-Time团队还建议迁移到 java.time 。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。
许多 java.time 功能在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在ThreeTenABP中进一步适应 Android 。
Instant
第一步是跳出旧课程,进入新课程。对于转换,新方法已添加到旧类中。该java.util.Date
课程现在提供toInstant
. AnInstant
是 UTC 时间线上的一个时刻,分辨率可以达到纳秒。
Instant instant = myUtilDate.toInstant();
时区
确定日期需要时区。对于任何给定的时刻,日期都会因时区而在全球范围内变化。巴黎的午夜过后几分钟,在蒙特利尔仍然是“昨天”。
该类ZoneId
代表一个时区。请注意,我们从不使用主流媒体中常见的 3-4 个字母缩写,例如EST
or IST
。这些不是真正的时区,不是标准化的,甚至不是唯一的(!)。而是使用tz 数据库中以 format 定义的适当时区continent/region
。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );
询问ZonedDateTime
您需要的零件。
int year = zdt.getYear();
int month = zdt.getMonthValue(); // Or handy Month enum… zdt.getMonth();
int dayOfMonth = zdt.getDayOfMonth();
LocalDate
如果您正在做大量工作,而您肯定想忽略一天中的时间和时区,请使用该LocalDate
课程。
LocalDate localDate = zdt.toLocalDate();