官方文档
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);