• 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.hutoolgroupId>
        <artifactId>hutool-allartifactId>
        <version>5.8.5version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    类型转换 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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

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

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    4、将 数组 转换为 集合

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

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    7、时间单位转换

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

    8、金额大小写转换

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

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

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    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);
    // 还可以计算 :月日周时分秒
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7、获取星座和属相

    // 获取星座,参数为月日,结果为 :射手座
    String zodiac = DateUtil.getZodiac(11, 8);
    System.out.println(zodiac);
    
    // 获取属相,结果为 :兔
    String chineseZodiac = DateUtil.getChineseZodiac(1999);
    System.out.println(chineseZodiac);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    8、获取年龄

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

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    企业实现员工聊天和转账行为的实时监管
    使用@Transactional注解,Exception异常没有回滚解决方案
    双位置继电器RXMD2-1MRK001984 DC220V
    快速自动化处理JavaScript渲染页面的方法
    南辕北辙
    深度学习-梯度下降算法-NLP(五)
    《HelloGitHub》第 73 期
    flex布局
    浅析Redis大Key
    【LeetCode刷题日志】622.设计循环队列
  • 原文地址:https://blog.csdn.net/weixin_46047612/article/details/126220998