作为一个全新的 API,Java 日期和时间 API 不得不与已有的类之间互相操作,尤其是无处不在的 java.util.Date、java.util.GregorianCalendar 及 java.sql.Date、java.sql.Time、java.sql.Timestamp。
Instant 类类似于 java.util.Date 类。在 Java8 中,java.util.Date 类中增加了两个方法:toInstant 方法用来将一个 Date 对象转换为一个 Instant 对象,而静态方法 from 正好相反。例如:
// 将 Instant 转换为 Date 对象
Date date = Date.from(Instant.now());
System.out.println("date=" + date);
// 将 Date 转换为 Instant 对象
Instant instant = date.toInstant();
System.out.println("instant=" + instant);ZonedDateTime 类似于 java.util.GregorianCalendar 类,后者也在 Java8 中添加了一些转换方法。toZonedDateTime 方法可以将一个 GregorianCalendar 对象转换为一个 ZonedDateTime 对象,而静态方法 from 则可以进行反方向的转换。例如:
// 将 Instant 转换为 GregorianCalendar 对象
GregorianCalendar calendar = GregorianCalendar.from(ZonedDateTime.now());
System.out.println("calendar=" + calendar);
// 将 GregorianCalendar 转换为 Instant 对象
ZonedDateTime zonedDateTime = calendar.toZonedDateTime();
System.out.println("zonedDateTime=" + zonedDateTime);java.sql 包中的日期和时间类也都添加了各自的转换方法。例如:
// 创建一个 Instant 对象
Instant instant = Instant.now();
// 将 Instant 转换为 java.sql.Date
java.util.Date sqlDate = java.sql.Date.from(instant);
System.out.println("java.sql.Date from Instant: " + sqlDate);
System.out.println(sqlDate.toInstant());
// 将 Instant 转换为 java.sql.Time
java.util.Date sqlTime = java.sql.Time.from(instant);
System.out.println("java.sql.Time from Instant: " + sqlTime);
System.out.println(sqlTime.toInstant());
// 将 Instant 转换为 java.sql.Timestamp
java.sql.Timestamp sqlTimestamp = java.sql.Timestamp.from(instant);
System.out.println("java.sql.Timestamp from Instant: " + sqlTimestamp);
System.out.println(sqlTimestamp.toInstant());你还可以向使用 java.text.Format 的遗留代码传递一个 DateTimeFormatter 对象,用新的方式进行格式化。