第一章 Hutool工具的使用——日期时间
文章目录
前言
本文是根据官方文档进行学习,代码案例大部分来自官方文档。本文仅作为学习记录
Hutool官方文档
日期时间工具-DateUtil
由来
考虑到Java本身对日期时间的支持有限,并且Date和Calendar对象的并存导致各种方法使用混乱和复杂,故使用此工具类做了封装。这其中的封装主要是日期和字符串之间的转换,以及提供对日期的定位(一个月前等等)。
对于Date对象,为了便捷,使用了一个DateTime类来代替之,继承自Date对象,主要的便利在于,覆盖了toString()方法,返回yyyy-MM-dd
HH:mm:ss形式的字符串,方便在输出时的调用(例如日志记录等),提供了众多便捷的方法对日期对象操作,关于DateTime会在相关章节介绍。
Date、long、Calendar之间的相互转换
字符串转日期
DateUtil.parse方法会自动识别一些常用格式 |
---|
yyyy-MM-dd HH:mm:ss |
yyyy/MM/dd HH:mm:ss |
yyyy.MM.dd HH:mm:ss |
yyyy年MM月dd日 HH时mm分ss秒 |
yyyy-MM-dd |
yyyy/MM/dd |
yyyy.MM.dd |
HH:mm:ss |
HH时mm分ss秒 |
yyyy-MM-dd HH:mm |
yyyy-MM-dd HH:mm:ss.SSS |
yyyyMMddHHmmss |
yyyyMMddHHmmssSSS |
yyyyMMdd |
EEE, dd MMM yyyy HH:mm:ss z |
EEE MMM dd HH:mm:ss zzz yyyy |
yyyy-MM-dd’T’HH:mm:ss’Z’ |
yyyy-MM-dd’T’HH:mm:ss.SSS’Z’ |
yyyy-MM-dd’T’HH:mm:ssZ |
yyyy-MM-dd’T’HH:mm:ss.SSSZ |
String dateStr = "2021-07-01";
Date date = DateUtil.parse(dateStr);
我们也可以使用自定义日期格式转化:
String dateStr = "2021-07-01";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");
格式化日期输出
获取Date对象的某个部分
开始和结束时间
有的时候我们需要获得每天的开始时间、结束时间,每月的开始和结束时间等等,DateUtil也提供了相关方法:
日期时间偏移
日期或时间的偏移指针对某个日期增加或减少分、小时、天等等,达到日期变更的目的。Hutool也针对其做了大量封装
日期时间差
有时候我们需要计算两个日期之间的时间差(相差天数、相差小时数等等),Hutool将此类方法封装为between方法:
格式化时间差
有时候我们希望看到易读的时间差,比如XX天XX小时XX分XX秒,此时使用DateUtil.formatBetween方法:
星座和属相
其它
日期时间对象-DateTime
由来
考虑工具类的局限性,在某些情况下使用并不简便,于是DateTime类诞生。DateTime对象充分吸取Joda-Time库的优点,并提供更多的便捷方法,这样我们在开发时不必再单独导入Joda-Time库便可以享受简单快速的日期时间处理过程。
说明
DateTime类继承于java.util.Date类,为Date类扩展了众多简便方法,这些方法多是DateUtil静态方法的对象表现形式,使用DateTime对象可以完全替代开发中Date对象的使用。
使用
新建对象
DateTime对象包含众多的构造方法,构造方法支持的参数有:
- Date
- Calendar
- String(日期字符串,第二个参数是日期格式)
- long 毫秒数
构建对象有两种方式:DateTime.of()和new DateTime():
使用对象
DateTime的成员方法与DateUtil中的静态方法所对应,因为是成员方法,因此可以使用更少的参数操作日期时间。
示例:获取日期成员(年、月、日等)
对象的可变性
DateTime对象默认是可变对象(调用offset、setField、setTime方法默认变更自身),但是这种可变性有时候会引起很多问题(例如多个地方共用DateTime对象)。我们可以调用setMutable(false)方法使其变为不可变对象。在不可变模式下,offset、setField方法返回一个新对象,setTime方法抛出异常。
格式化为字符串
调用toString()方法即可返回格式为yyyy-MM-dd HH:mm:ss的字符串,调用toString(String format)可以返回指定格式的字符串。
农历日期-ChineseDate
介绍
农历日期,提供了生肖、天干地支、传统节日等方法。
使用
构建ChineseDate对象
ChineseDate表示了农历的对象,构建此对象既可以使用公历的日期,也可以使用农历的日期。
基本使用
获取天干地支
从5.4.1开始,Hutool支持天干地支的获取:
LocalDateTime工具-LocalDateTimeUtil
介绍
从Hutool的5.4.x开始,Hutool加入了针对JDK8+日期API的封装,此工具类的功能包括LocalDateTime和LocalDate的解析、格式化、转换等操作。
使用
日期转换
日期字符串解析
解析同样支持LocalDate:
日期格式化
日期偏移
如果是减少时间,offset第二个参数传负数即可:
计算时间间隔
一天的开始和结束
计时器工具-TimeInterval
介绍
Hutool通过封装TimeInterval实现计时器功能,即可以计算方法或过程执行的时间。
TimeInterval支持分组计时,方便对比时间。
使用
也可以实现分组计时: