美文网首页
Java 8日期&时间处理

Java 8日期&时间处理

作者: 但时间也偷换概念 | 来源:发表于2019-11-03 13:20 被阅读0次

引言

在Java 8 之前的版本中,时间处理一直是备受吐槽的点,比如早期的Date、Calendar等类库。

最早的jdk 1.0版本,Date类创建时间非常不直观,并且toString方法返回的字符串也很容易误导人,返回的值包含了JVM默认时区CET,即中欧时间(Central Europe Time)。但这并不表示Date类在任何方面支持时区。随着1.0退出历史舞台,1.1牺牲了前向兼容性,废弃了很多Date中的方法,并且推出了Calendar取而代之。但Calendar还是有很多问题和设计缺陷,比如月份还是从0开始,DateFormat也不是线程安全的,还有就是Date和Calendar本身就比较混淆,到底应该用哪一种呢?程序员也会很困惑,最后他们本身都是可变的,这种设计会将你拖入维护的噩梦。

于是在这个背景下,joda-time成了很多程序员的选择,纷纷转向了joda-time。

为了解决这些问题,Oracle决定在原生的Java API中提供高质量的日期和时间支持,所以Java 8推出了java.time包,所以Java 8推出的时间类库也是大量整合了joda-time中的特性。

1.1 创建日期&时间

使用LocalDate、LocalTime、LocalDateTime

我们来看一下java.time提供的新api是如何创建一个日期或者时间的。

注意一下,DateTimeFormatter是一个很强大的功能,可以自定义pattern,并且线程安全。

在工具类中,可以通过正则表达式+DateTimeFormatter组合,支持多pattern的自动匹配parse。

LocalDate LocalTime LocalDateTime

1.2 获取日期&时间年月日时分秒信息

LocalDate、LocalTime、LocalDateTime三者api高度相似,所以不一一列举了。

api

1.3 时间的比较

时间的比较也是比较常见的操作,我们看一下如何使用。

compare

非常简单,提供有各种api支持时间对比。

1.4 时间的输出

时间输出有两种。

1.默认标准pattern(toString)

2.自定义pattern(format)

format toString

可以看到,还是可以借助DateTimeFormatter做自定义格式的输出。

1.5 LocalDate、LocalTime、LocalDateTime相互转换

translate

1.6 Duration&Period

这两个概念程序员应该都很熟悉,是一种between的概念,表示一个区间段。

1.7 操纵日期&时间

主要是一些plus、minus、with等操作

1.8 时区处理

添加时区

计算时区

1.9 TemporalAdjuster接口

TemporalAdjuster是一个FunctionalInterface接口,用来定制更灵活的时间处理需求,比如下面这个例子,我们计算下一个工作日是几号。

相关文章

网友评论

      本文标题:Java 8日期&时间处理

      本文链接:https://www.haomeiwen.com/subject/thbkbctx.html