美文网首页
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