JDK 8 中时间API
一、分类
1、时间对象
-
TemporalAccessor: 顶级接口
-
Temporal: 子接口,继承TemporalAccessor接口
-
Era: 子接口,继承TemporalAccessor接口
-
Instant: 时间戳,有时区(UTC时区),实现Temporal、TemporalAdjuster接口
-
LocalDate: 日期,无指定时区,实现Temporal、TemporalAdjuster接口
-
LocalTime: 时间,无指定时区,实现Temporal、TemporalAdjuster接口
-
LocalDateTime: 日期时间,无指定时区,实现Temporal、TemporalAdjuster接口
-
OffsetTime: 偏移后时间,无指定时区,实现Temporal、TemporalAdjuster接口
-
OffsetDateTime: 偏移后日期时间,无指定时区,实现Temporal、TemporalAdjuster接口
-
ZonedDateTime: 时区日期时间,无指定时区,实现Temporal、TemporalAdjuster接口
2、时区、偏移量
-
ZoneId: 时区
-
ZoneOffset: 时区偏移量
3、工具类
-
TemporalAdjuster: 功能型接口
-
TemporalAdjusters: 工具类,每个方法中生成一个匿名类,实现了TemporalAdjuster接口
// 下一个周几 public static TemporalAdjuster next(DayOfWeek dayOfWeek) { int dowValue = dayOfWeek.getValue(); return (temporal) -> { int calDow = temporal.get(DAY_OF_WEEK); int daysDiff = calDow - dowValue; return temporal.plus(daysDiff >= 0 ? 7 - daysDiff : -daysDiff, DAYS); }; }
// 下一个周一时间 LocalDate ld = LocalDate.now(); System.out.println("LocalDate: " + ld); ld = ld.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println("LocalDate next TUESDAY: " + ld); // LocalDate: 2019-12-30 // LocalDate next MONDAY: 2020-01-06
// with方法内部调用了匿名类的adjustInto方法 public LocalDate with(TemporalAdjuster adjuster) { // optimizations if (adjuster instanceof LocalDate) { return (LocalDate) adjuster; } return (LocalDate) adjuster.adjustInto(this); }
4、日期格式化
-
DateTimeFormatter
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS");