Java8对日期API做了改进,提供了许多好用的方法和接口。
首先,最基本也最重要的3个对象:
LocalDate
:日期对象LocalTime
:时间对象LocalDateTime
:日期时间对象,是LocalDate
和LocalTime
的合集
对象的创建
以上这3个对象,都各自有3种创建方式。
- 通过
.now()
得到当前日期时间对象。 - 通过
.of()
直接指定年月日,时分秒。 LocalDate
和LocalTime
通过解析字符串创建,LocalDateTime
可以通过前2个对象创建。
LocalDate对象3种创建方式以及相关方法示例
|
|
LocalTime对象3种创建方式以及相关方法示例
|
|
LocalDateTime对象3种创建方式以及相关方法示例
|
|
时间间隔对象
Duration
:可以传2个localTime对象,localDateTime对象或者Instant对象Period
:用年,月,日建模,可以传2个localDate对象
|
|
修改日期时间对象
直接使用.with()
来修改对应的年月日时分秒属性
|
|
在现有对象上做相对修改
|
|
自定义修改日期
如果要对日期做一些复杂的修改,那么可以通过TemporalAdjusters
接口实现复杂逻辑。
jdk为我们实现了一些常用的方法:
- dayOfWeekInMonth:创建一个新的日期,它的值为同一个月中每一周的第几天
- firstDayOfMonth:创建一个新的日期,它的值为当月的第一天
- firstDayOfNextMonth:创建一个新的日期,它的值为下月的第一天
- firstDayOfNextYear:创建一个新的日期,它的值为明年的第一天
- firstDayOfYear:创建一个新的日期,它的值为当年的第一天
- firstInMonth:创建一个新的日期,它的值为同一个月中,第一个符合星期几要求的值
- lastDayOfMonth:创建一个新的日期,它的值为当月的最后一天
- lastDayOfNextMonth:创建一个新的日期,它的值为下月的最后一天
- lastDayOfNextYear:创建一个新的日期,它的值为明年的最后一天
- lastDayOfYear:创建一个新的日期,它的值为今年的最后一天
- lastInMonth:创建一个新的日期,它的值为同一个月中,最后一个符合星期几要求的值
- next/previous:创建一个新的日期,并将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期
- nextOrSame/previousOrSame:创建一个新的日期,并将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期,如果该日期已经符合要求,直接返回该对象
自定义格式化输出日期
新版本,我们拥有一个线程安全的类:DateTimeFormatter
来看代码