前言
在Java 8中新增了表示时间的类,用来替代原来的Date、Calendar类
在新的时间类中,有三个时间概念需要与原来的作区分,可以参考SQL里的时间类型
- Date —— 日期,不包含时间
- Time —— 一天中的时间
- DateTime —— 日期加时间
Java 8的时间相关的几个包
- java.time:核心时间类
- java.time.chrono 其他地方的纪年法
- java.time.format 时间格式化相关的类
- java.time.temporal 定义时间的基础接口
- java.time.zone 时区相关的类
常用的类
| 类 | 说明 |
|---|---|
| Duration | 表示持续时间,从一个时间点持续到另一个时间点,比如:数据结构课从8:00上到10:00 |
| Instant | 时间点 |
| LocalDate | 本地日期,默认时区 |
| LocalDateTime | 本地日期时间,默认时区 |
| MonthDay | 月份中的日期 |
| OffsetDateTime | 时区偏移量的日期时间 |
| OffsetTime | 时区偏移量的事件 |
| Period | 表示时间段,最小单位是天,开始结束时间点不确定,比如:国庆放7天假 |
| Year | 年 |
| YearMonth | 一年中的月 |
| ZonedDateTime | 时区的日期时间 |
| ZoneId | 时区ID,比如Asia/Shanghai |
| DayOfWeek | 一周的天 |
| Month | 月 |
| DateTimeFormatter | 日期格式化 |
UML类图

java.time包部分类UML图.png
转换关系

Java8 Time类转换图.png
Spring支持
Spring Boot
如果是Spring默认的Jackson库,在字段上Jackson的@JsonFormat注解,Spring在序列化和反序列化时都会按照指定的格式进行格式化和解析,即请求类型和返回类型的字段都可以用。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
LocalDateTime createAt;