Hutool 是一个小而全的 JAVA 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”。
在 Mavan 项目中引入 dependency 即可。通过 Hutool,可以减少代码搜索成本,避免网络上参差不齐的代码出现导致的bug。
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.5</version></dependency>
Hutool 提供了对日期时间、随机数、图片、布隆过滤器、文件、流、加密解密、转码、正则、线程、XML、JSON等常用方法进行封装,组成各种Util工具类,同时提供以下组件:
可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块。
我们知道,Java 中关于日期的 API 使用一直很繁琐,从 Date 到 Calendar,对开发者都不是那么友好,还容易出 BUG,那么 Hutool 首先就对日期下手了,提供了针对 JDK 中 Date 和 Calendar 对象的封装。
比如要对当前的 Date 日期进行格式化,一般使用 SimpleDateFormat(yyyy-MM-dd HH:mm:ss) 这种方式,但 SimpleDateFormat 这个类是线程不安全的,而 Hutool 提供了一个 FastDateFormat 类,提供线程安全的针对 Date 对象的格式化和日期字符串解析支持。此对象在实际使用中并不需要感知,相关操作已经封装在 DateUtil 和 DateTime 的相关方法中。
下面是一段日期API 的示例代码:
import cn.hutool.core.date.*;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;import java.util.Date;@SpringBootTestpublic class DateTest { @Test public void testDate() { // 获取当前日期 Date date = DateUtil.date(); System.out.println(date); // 格式化日期输出 //结果 2022/xx/xx String format = DateUtil.format(date, "yyyy/MM/dd"); //常用格式的格式化,结果:2022-xx-xx String formatDate = DateUtil.formatDate(date); //结果:2022-xx-xx 00:00:00 String formatDateTime = DateUtil.formatDateTime(date); //结果:00:00:00 String formatTime = DateUtil.formatTime(date); System.out.printf("%s, %s, %s, %sn", format, formatDate, formatDateTime, formatTime); String dateStr1 = "2022-08-08 08:08:08"; Date date1 = DateUtil.parse(dateStr1); String dateStr2 = "2023-01-01 00:00:00"; Date date2 = DateUtil.parse(dateStr2); // 日期时间差 long betweenDay = DateUtil.between(date1, date2, DateUnit.MS); // 格式化时间差,输出:2天1小时1分4秒 String formatBetween = DateUtil.formatBetween(betweenDay, BetweenFormatter.Level.SECOND); System.out.println(formatBetween); //一天的开始,结果:2022-xx-01 00:00:00 Date beginOfDay = DateUtil.beginOfDay(date); //一天的结束,结果:2022-xx-01 23:59:59 Date endOfDay = DateUtil.endOfDay(date); System.out.printf("%s %s n", beginOfDay, endOfDay); // 星座和属相 // 射手座 String zodiac = DateUtil.getZodiac(Month.JUNE.getValue(), 11); System.out.println(zodiac); // 蛇 String chineseZodiac = DateUtil.getChineseZodiac(2003); System.out.println(chineseZodiac); DateTime dateTime = DateUtil.offsetDay(date1, 10); System.out.println(dateTime); }}
输出结果:
2022-08-16 23:20:57
2022/08/16, 2022-08-16, 2022-08-16 23:20:57, 23:20:57
145天15小时51分52秒
2022-08-16 00:00:00 2022-08-16 23:59:59
双子座
羊
2022-08-18 08:08:08