JDK1.8 中的日期与时间 API

2020-09-21

为什么 JDK 1.8 之前的时间与日期 API 不好用?

1、java.util.Date 是从 JDK 1.0 开始提供,易用性差

  • 默认是中欧时区(Central Europe Time)

  • 起始年份是 1900 年

  • 起始月份从 0 开始

  • 对象创建之后可修改

2、JDK 1.1 废弃了 Date 中很多方法,新增了并建议使用 java.util.Calendar 类

  • 相比 Date 去掉了年份从 1900 年开始

  • 月份依然从 0 开始

  • 选用 Date 或 Calendar,让人更困扰

3、DateFormat 格式化时间,线程不安全

 

为了解决 JDK 中时间与日期较难使用的问题,JDK 1.8 开始,吸收了 Joda-Time 很多功能,新增 java.time 包,加了新特性

  • 区分适合人阅读的和适合机器计算的时间与日期类

  • 日期、时间及对比相关的对象创建完均不可修改

  • 可并发解析与格式化日期与时间

  • 支持设置不同的时区与历法

 

LocalDate 本地日期
LocalTime 本地时间
LocalDateTime 本地日期+时间
Instant 时间戳,适合机器时间计算
Duration 时间差
Period 年、月、日差
ZoneOffset 时区偏移量
ZonedDateTime 带时区的日期时间
Clock 时钟,获取其他地区时钟
DateTimeFormatter 时间格式化
Temporal 日期-时间获取值的字段
TemporalAdjuster emporal 对象转换,实现自定义
ChronoLocalDate 日历系统接口

 

常用 api

1、 获取当前日期

LocalDate.now()

 

2、创建日期

LocalDate date = LocalDate.of(2020, 9, 21)

 

3、获取年份

date.getYear()

//通过 TemporalField 接口的实现枚举类 ChronoField.YEAR 获取年份
date.get(ChronoField.YEAR)

 

4、获取月份

date.getMonth().getValue()

//通过 TemporalField 接口的实现枚举类 ChronoField.MONTH_OF_YEAR 获取月份
date.get(ChronoField.MONTH_OF_YEAR)

 

5、获取日

date.getDayOfMonth()

//通过 TemporalField 接口的实现枚举类 ChronoField.DAY_OF_MONTH 获取日
date.get(ChronoField.DAY_OF_MONTH)

 

6、获取周几

date.getDayOfWeek()

 

7、获取当前月多少天

date.lengthOfMonth()

 

8、获取当前年是否为闰年

date.isLeapYear()

 

9、当前时间

LocalTime nowTime = LocalTime.now()

 

10、创建时间

LocalTime.of(23, 59, 59)

 

11、获取时

nowTime.getHour()

 

12、获取分

nowTime.getMinute()

 

13、获取秒

nowTime.getSecond()

 

14、获取毫秒

nowTime.getLong(ChronoField.MILLI_OF_SECOND)

 

15、获取纳秒

nowTime.getNano()

 

16、创建日期时间对象

LocalDateTime.of(2020, 9, 21, 1, 2, 3);
LocalDateTime.of(date, nowTime);

 

17、获取当前日期时间对象

LocalDateTime.now()

 

18、通过 LocalDate 创建日期时间对象

date.atTime(1, 2, 3)

 

19、通过 LocalTime 创建日期时间对象

nowTime.atDate(date)

 

20、通过 LocalDateTime 获取 LocalDate 对象

LocalDateTime.now().toLocalDate()

 

21、通过 LocalDateTime 获取 LocalTime 对象

LocalDateTime.now().toLocalTime()

 

22、解析日期字符串

LocalDate.parse("2020-09-21")

 

23、解析时间字符串

LocalTime.parse("01:02:03")


24、解析日期时间字符串

ConstXiong 备案号:苏ICP备16009629号-3