Bootstrap

HuTool 工具类简单使用

官方文档

https://hutool.cn/docs/#/

简介

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

HuTool 名字的由来

Hutool = Hu + tool,是原公司项目底层代码剥离后的开源库,“Hu”是公司名称的表示,tool表示工具。Hutool谐音“糊涂”,一方面简洁易懂,一方面寓意“难得糊涂”。

依赖 :

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.5</version>
</dependency>

类型转换 Convert

Convert
Convert类可以说是一个工具方法类,里面封装了针对Java常见类型的转换,用于简化类型转换。Convert类中大部分方法为toXXX,参数为Object,可以实现将任意可能的类型转换为指定类型。同时支持第二个参数defaultValue用于在转换失败时返回一个默认值。

java 常见的类型转换
1、将 整数或数组 转为 字符串

// 将数字转换成字符串
int num = 1;
// 结果为 "1"
String numStr = Convert.toStr(num);

// 将数组转换成字符串
int[] nums = {1,2,3,4,5,6};
// 结果为 :"[1, 2, 3, 4, 5, 6]"
String arraysStr = Convert.toStr(nums);

2、将数组转换为指定类型的数组

// 将数组转换成整数类型的数组
String[] strs = {"1","2","3"};
long[] longs = {1,2,3};
Integer[] intStrs = Convert.toIntArray(strs);
Integer[] intArray = Convert.toIntArray(longs);

3、将 字符串 转换为 日期对象

// 将字符串格式转换为日期
String strDate = "2022-08-05";
String strDate2 = "2022/08/05";
Date date2 = Convert.toDate(strDate2);
Date date1 = Convert.toDate(strDate);
// 两个结果均为 :Fri Aug 05 00:00:00 CST 2022
System.out.println(date1);
System.out.println(date2);

注意 :该方法转成的日期格式不是标准格式,想要标准格式可以采取以下的方法 :
使用 DateUtil 工具中的 parse 方法,可将字符串转换为对应的日期,格式为年月日时分秒。

4、将 数组 转换为 集合

// 将数组转换为集合
String[] strings = {"1","2","3"};
List<String> list = (List<String>)Convert.toList(strings);
// 结果为 :[1, 2, 3]
System.out.println(list);

5、半角和全角的转换
在很多文本的统一化中这两个方法非常有用,主要对标点符号的全角半角转换。

// 全角转半角
String a = "123456789";
String sbc = Convert.toSBC(a);
// 123456789
System.out.println(sbc);

// 半角转全角
String b = "123456789";
String sbc1 = Convert.toDBC(b);
// 123456789
System.out.println(sbc1);

6、十六进制与字符串之间的转换

// 字符串转换为十六进制
String s = "测试字符串转换为十六进制";
String hex = Convert.toHex(s, CharsetUtil.CHARSET_UTF_8);
// 结果为 :e6b58be8af95e5ad97e7aca6e4b8b2e8bdace68da2e4b8bae58d81e585ade8bf9be588b6
System.out.println(hex);

// 十六进制转换字符串
String hex1 = "e6b58be8af95e5ad97e7aca6e4b8b2e8bdace68da2e4b8bae58d81e585ade8bf9be588b6";
String str = Convert.hexToStr(hex1,CharsetUtil.CHARSET_UTF_8);
// 结果为 :测试字符串转换为十六进制
System.out.println(str);

7、时间单位转换

// 将毫秒转换为分钟
long time = 321456L;
// 注意 TimeUtil 里面的参数不提示,直接输入会报错,只能复制粘贴进去
long timemin = Convert.convertTime(time, TimeUnit.MILLISECONDS, TimeUnit.MINUTES);
// 5
System.out.println(timemin);

8、金额大小写转换

// 金额转换为大写
double money = 67756.2;
String digitToChinese = Convert.digitToChinese(money);
// 结果为 :陆万柒仟柒佰伍拾陆元贰角叁分
System.out.println(digitToChinese);

注意 :转换为大写只能精确到分(小数点儿后两位),之后的数字会被忽略。

DateUtil

1、获取当前时间

Date date1 = DateUtil.date();
// 当前时间 2022-08-05 10:18:23
System.out.println(date1);

Date date2 = DateUtil.date(Calendar.getInstance());
// 当前时间 2022-08-05 10:18:23
System.out.println(date2);

Date date3 = DateUtil.date(System.currentTimeMillis());
// 当前时间 2022-08-05 10:18:23
System.out.println(date3);

String now = DateUtil.now();
// 当前时间(字符串) 2022-08-05 10:18:23
System.out.println(now);

String today = DateUtil.today();
// 当前日期(字符串) 2022-08-05
System.out.println(today);

2、字符串转日期

可以识别的字符串格式包括 :
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 = "2022-03-01";
Date date = DateUtil.parse(dateStr);
//2022-03-01 00:00:00
System.out.println(date);

// 说明 也可以使用以下的格式化输出,但是这样只会将时分秒格式化为00,不会将时分秒省去
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");

3、日期格式化输出(结果为字符串类型)

Date date = DateUtil.date();
String format = DateUtil.format(date, "yyyy/MM/dd");
// 结果为 :2022/08/05
System.out.println(format);

// 只取年月日
String formatDate = DateUtil.formatDate(date);
// 标准格式 :2022-08-05
System.out.println(formatDate);

// 年月日时分秒
String formatDateTime = DateUtil.formatDateTime(date);
// 结果 :2022-08-05 10:34:31
System.out.println(formatDateTime);

// 只取时分秒
String formatTime = DateUtil.formatTime(date);
// 结果 :10:34:31
System.out.println(formatTime);

4、获取日期中的某个部分

Date date = DateUtil.date();
//2022-08-05 10:43:14
System.out.println(date);

int year = DateUtil.year(date);
// 获取日期中的年份 :2022
System.out.println(year);

int month = DateUtil.month(date);
// 获取月份,从0开始,结果为7
System.out.println(month);

Month month1 = DateUtil.monthEnum(date);
// 获取月份枚举,得到的是英文的月份,结果 :AUGUST
System.out.println(month1);

int i = DateUtil.dayOfMonth(date);
// 获取这个月的第几天,结果为 :5
System.out.println(i);

int i1 = DateUtil.dayOfWeek(date);
// 获取这周的第几天,从周日算起,周日为1,结果为 :6
System.out.println(i1);

int i2 = DateUtil.dayOfYear(date);
// 获取本年的第几天,结果为 :217
System.out.println(i2);

int hour = DateUtil.hour(date, true);
// 获取小时,第二个参数的意思是否为24小时制,结果为 :10
System.out.println(hour);

int minute = DateUtil.minute(date);
// 获取分钟,结果为 :43
System.out.println(minute);

int second = DateUtil.second(date);
// 获取秒,结果为 :14
System.out.println(second);

5、日期时间偏移

Date date = DateUtil.date();
// 2022-08-05 10:51:49
System.out.println(date);

Date offsetDay = DateUtil.offsetDay(date, 2);
// 增加两天 :2022-08-07 10:51:49
System.out.println(offsetDay);

Date offsetHour = DateUtil.offsetHour(date, 3);
// 增加三个小时 :2022-08-07 13:51:49
System.out.println(offsetHour);

// 下面还有年月日时分秒以及周都可以偏移
针对当前时间,提供了一些简化的偏移方法
Date date = DateUtil.date();
// 2022-08-05 10:55:24
System.out.println(date);

Date yesterday = DateUtil.yesterday();
// 2022-08-04 10:55:24
System.out.println(yesterday);

Date tomorrow = DateUtil.tomorrow();
// 2022-08-06 10:55:24
System.out.println(tomorrow);

Date lastMonth = DateUtil.lastMonth();
// 2022-07-05 10:55:24
System.out.println(lastMonth);

Date nextMonth = DateUtil.nextMonth();
// 2022-09-05 10:55:24
System.out.println(nextMonth);

Date lastWeek = DateUtil.lastWeek();
// 按照七天来算的 :2022-07-29 10:55:24
System.out.println(lastWeek);

Date nextWeek = DateUtil.nextWeek();
// 按照七天来算的 :2022-08-12 10:55:24
System.out.println(nextWeek);

6、时期时间差

String dateStr1 = "2017-03-01 22:33:23";
Date date1 = DateUtil.parse(dateStr1);

String dateStr2 = "2017-04-01 23:33:23";
Date date2 = DateUtil.parse(dateStr2);

long between = DateUtil.between(date1, date2, DateUnit.DAY);
// 计算两个日期之间相差几天 :31
System.out.println(between);
// 还可以计算 :月日周时分秒

7、获取星座和属相

// 获取星座,参数为月日,结果为 :射手座
String zodiac = DateUtil.getZodiac(11, 8);
System.out.println(zodiac);

// 获取属相,结果为 :兔
String chineseZodiac = DateUtil.getChineseZodiac(1999);
System.out.println(chineseZodiac);

8、获取年龄

// 获取年龄,参数为出生日期,结果为 :22
int age = DateUtil.ageOfNow("1999-10-08");
System.out.println(age);

9、判断是否为闰年

// 判断是否为闰年
boolean leapYear = DateUtil.isLeapYear(2021);
System.out.println(leapYear);

农历日期
// 通过公历日期构建 ChineseDate 对象
ChineseDate date = new ChineseDate(DateUtil.parseDate("2022-08-04"));
String chineseMonth = date.getChineseMonth();
// 获取中国方法的月份,x月,结果 :七月
System.out.println(chineseMonth);

String chineseMonthName = date.getChineseMonthName();
// 获取月份在中国的名称,结果 :七月
System.out.println(chineseMonthName);

String chineseDay = date.getChineseDay();
// 获取日子,结果为 :初七
System.out.println(chineseDay);

String cyclical = date.getCyclical();
// 获取年,结果为 :壬寅
System.out.println(cyclical);

String chineseZodiac = date.getChineseZodiac();
// 获取当年的生肖,结果 :虎
System.out.println(chineseZodiac);

String festivals = date.getFestivals();
// 获取传统节日,结果为 :七夕
System.out.println(festivals);

String toString = date.toString();
// 壬寅虎年 七月初七
System.out.println(toString);
;