Java工具类库

链接地址:https://www.hutool.cn/docs/#/

1 接入准备

1.1 依赖注入

  1. <!-- hutool SecureUtil.md5() -->
  2. <dependency>
  3. <groupId>cn.hutool</groupId>
  4. <artifactId>hutool-all</artifactId>
  5. <version>5.7.22</version>
  6. </dependency>

2 常用工具

2.1 Convert 类型转换

  • toStr
  • toIntArray
  • toDate
  • toList
  • toSBC:半角转全角
  • toDBC:全角转半角
  • toHex:转换成16进制(hex)
  • hexToStr
  • digitToChinese:金额大小写转换

2.1.1 digitToChinese 金额大小写转换

  1. /**
  2. * 金额大小写转换
  3. */
  4. @Test
  5. public void digitToChinese() {
  6. double dig = 67556.32;
  7. String digR = Convert.digitToChinese(dig);
  8. System.out.println(digR);
  9. }

2.2 DateUtil 日期时间工具类

2.2.1 Date long Calendar相互转换

  1. /**
  2. * Date、long、Calendar之间的相互转换
  3. */
  4. @Test
  5. public void DLC() {
  6. //当前时间
  7. Date date = DateUtil.date();
  8. System.out.println(date);
  9. //当前
  10. Date date2 = DateUtil.date(Calendar.getInstance());
  11. System.out.println(date2);
  12. //当前
  13. Date date3 = DateUtil.date(System.currentTimeMillis());
  14. System.out.println(date3);
  15. //当前时间字符串 格式:yyyy-MM-dd HH:mm:ss
  16. String now = DateUtil.now();
  17. System.out.println(now);
  18. //格式:yyyy-MM-dd
  19. String today = DateUtil.today();
  20. System.out.println(today);
  21. }

result

  1. 2022-04-25 15:11:10
  2. 2022-04-25 15:11:10
  3. 2022-04-25 15:11:10
  4. 2022-04-25 15:11:10
  5. 2022-04-25

2.2.2 parse 字符串转日期

  1. /**
  2. * 字符串转日期
  3. * DateUtil.parse
  4. */
  5. @Test
  6. public void parse() {
  7. String dateStr = "2017-03-01";
  8. Date date = DateUtil.parse(dateStr);
  9. System.out.println(date);
  10. Date date1 = DateUtil.parse(dateStr,"yyyy-MM-dd");
  11. System.out.println(date1);
  12. }

result

  1. 2017-03-01 00:00:00
  2. 2017-03-01 00:00:00

2.2.3 format 格式化日期输出

  1. /**
  2. * 格式化日期输出
  3. */
  4. @Test
  5. public void format() {
  6. String dateStr = "2017-03-01";
  7. Date date = DateUtil.parse(dateStr);
  8. System.out.println(date);
  9. //结果 2017/03/01
  10. String format = DateUtil.format(date, "yyyy/MM/dd");
  11. System.out.println(format);
  12. //常用格式的格式化,结果:2017-03-01
  13. String formatDate = DateUtil.formatDate(date);
  14. System.out.println(formatDate);
  15. //结果:2017-03-01 00:00:00
  16. String formatDateTime = DateUtil.formatDateTime(date);
  17. System.out.println(formatDateTime);
  18. //结果:00:00:00
  19. String formatTime = DateUtil.formatTime(date);
  20. System.out.println(formatTime);
  21. }

result

  1. 2017-03-01 00:00:00
  2. 2017/03/01
  3. 2017-03-01
  4. 2017-03-01 00:00:00
  5. 00:00:00

2.2.4 获取date的某个部分

  1. /**
  2. * 获取Date对象的某个部分
  3. * 2022/4/25
  4. */
  5. @Test
  6. public void datePart() {
  7. Date date = DateUtil.date();
  8. //获得年的部分
  9. System.out.println(DateUtil.year(date));
  10. //获得月份,从0开始计数
  11. System.out.println(DateUtil.month(date));
  12. //获得月份枚举
  13. System.out.println(DateUtil.monthEnum(date));
  14. //获取日期
  15. System.out.println(DateUtil.dayOfMonth(date));
  16. }

result

2022
3
APRIL
25

2.2.5 获取一天的开始和结束时间

/**
     * 获取一天的开始和结束时间
     */
    @Test
    public void startAndEnd() {
        String dateStr = "2017-03-01 22:33:23";
        Date date = DateUtil.parse(dateStr);
        System.out.println(date);
        //一天的开始,结果:2017-03-01 00:00:00
        Date beginOfDay = DateUtil.beginOfDay(date);
        System.out.println(beginOfDay);
        //一天的结束,结果:2017-03-01 23:59:59
        Date endOfDay = DateUtil.endOfDay(date);
        System.out.println(endOfDay);
    }

result

2017-03-01 22:33:23
2017-03-01 00:00:00
2017-03-01 23:59:59

2.2.6 offSet 日期时间偏移

 /**
     * 日期时间偏移
     */
    @Test
    public void off() {
        String dateStr = "2017-03-01 22:33:23";
        Date date = DateUtil.parse(dateStr);
        //结果:2017-03-03 22:33:23
        Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);

        //常用偏移,结果:2017-03-04 22:33:23
        DateTime newDate2 = DateUtil.offsetDay(date, 3);

        //常用偏移,结果:2017-03-01 19:33:23
        DateTime newDate3 = DateUtil.offsetHour(date, -3);
        //分钟偏移
        System.out.println(DateUtil.offsetMinute(date,2));
    }

result

2017-03-01 22:35:23

2.2.7 简化时间偏差

/**
     * 简化时间偏移
     */
    @Test
    public void SimpleOff() {
        //昨天
        System.out.println(DateUtil.yesterday());
        //明天
        System.out.println(DateUtil.tomorrow());
        //上周
        System.out.println(DateUtil.lastWeek());
        //下周
        System.out.println(DateUtil.nextWeek());
        //上个月
        System.out.println(DateUtil.lastMonth());
        //下个月
        System.out.println(DateUtil.nextMonth());

    }

result

2022-04-24 15:23:10
2022-04-26 15:23:10
2022-04-18 15:23:10
2022-05-02 15:23:10
2022-03-25 15:23:10
2022-05-25 15:23:10

2.2.8 between 日期时间差

/**
     * 日期时间差
     * between
     */
    @Test
    public void between() {
        String dateStr1 = "2017-03-01 22:33:23";
        Date date1 = DateUtil.parse(dateStr1);

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

        //相差一个月,31天
        long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);

        System.out.println(betweenDay);

        //格式化时间差
        String formatBet = DateUtil.formatBetween(betweenDay, BetweenFormatter.Level.MINUTE);
        System.out.println(formatBet);

        System.out.println(DateUtil.between(new Date(),new Date(),DateUnit.SECOND));

    }

result

35
0分
0

2.2.9 ageOfNow

获取年龄

2.2.10 isLeapYear

是否是闰年

/**
     * 年龄:ageOfNow
     * 闰年:isLeapYear
     */
    @Test
    public void age() {
        System.out.println(DateUtil.ageOfNow("1998-01-17"));
        System.out.println(DateUtil.isLeapYear(2022));
    }
24
false

2.3 StrUtil 字符串工具

  • isBlank
  • isNotBlank
  • isEmpty
  • isNotEmpty
  • hasBlank
  • hasEmpty
  • removeProfix,removeSuffix

2.4 NumberUtil 数字工具

  • NumberUtil.add 针对数字类型做加法
  • NumberUtil.sub 针对数字类型做减法
  • NumberUtil.mul 针对数字类型做乘法
  • NumberUtil.div 针对数字类型做除法,并提供重载方法用于规定除不尽的情况下保留小数位数和舍弃方式。
  • NumberUtil.round 方法主要封装BigDecimal中的方法来保留小数,返回BigDecimal,这个方法更加灵活,可以选择四舍五入或者全部舍弃等模式
  • NumberUtil.roundStr 方法主要封装String.format方法,舍弃方式采用四舍五入。
  • NumberUtil.isNumber 是否为数字
  • NumberUtil.isInteger 是否为整数
  • NumberUtil.isDouble 是否为浮点数
  • NumberUtil.isPrimes 是否为质数
  • NumberUtil.generateRandomNumber
  • NumberUtil.generateBySet
  • NumberUtil.factorial 阶乘
  • NumberUtil.sqrt 平方根
  • NumberUtil.divisor 最大公约数
  • NumberUtil.multiple 最小公倍数
  • NumberUtil.getBinaryStr 获得数字对应的二进制字符串
  • NumberUtil.binaryToInt 二进制转int
  • NumberUtil.binaryToLong 二进制转long
  • NumberUtil.compare 比较两个值的大小
  • NumberUtil.toStr 数字转字符串,自动并去除尾小数点儿后多余的0

2.5 RandomUtil 随机工具

    /**
     * 产生随机数
     */
    @Test
    public void randomX() {
        int c = RandomUtil.randomInt(100000, 1000000);
        System.out.println(c);
        System.out.println(RandomUtils.nextInt());
        byte[] c1 = RandomUtil.randomBytes(10);
        System.out.println(c1);
    }

2.6 SecureUtil 加密解密工具

    @Test
    public void secure() {
        System.out.println(SecureUtil.md5("123456"));
    }

2.7 Validator 字段验证器

/**
     * 验证
     */
    @Test
    public void val() {
        //生日
        String bir = "1998-01-17";
        System.out.println("bir:" + Validator.isBirthday(bir));
        //生日,分年月日
        System.out.println("bir1:" + Validator.isBirthday(1998,1,17));
        //检查数字是否在指定范围内
        System.out.println("between:" + Validator.isBetween(99,0,200));
        //是否为驾驶证
        System.out.println("carDriving:" + Validator.isCarDrivingLicence("00001"));
        //是否全为汉字
        System.out.println("chinese:" + Validator.isChinese("查锦涛"));
        //身份证
        System.out.println("id:" + Validator.isCitizenId("4127241998"));
        //邮箱
        System.out.println("email:" + Validator.isEmail("2207808803@qq.com"));
        //验证是否为英文字母 、数字和下划线
        System.out.println("general:" + Validator.isGeneral("cjt_220780"));
        //验证是否为给定长度范围的英文字母 、数字和下划线
        System.out.println("general2:" + Validator.isGeneral("cjt_220780",6,9));
        //ipv4 isIpv4
        //ipv6 isIpv6
        //全部小写 isLowerCase
        //手机号码
        System.out.println("mobile:" + Validator.isMobile("19103831847"));
        //货币
        System.out.println("money:" + Validator.isMoney("100"));
        //isUUID
        System.out.println("uuid:" + Validator.isUUID(UUID.randomUUID().toString()));
        //是否是字母,(包括大写和小写)
        System.out.println("word:" + Validator.isWord("dhwie"));
        //邮编
        System.out.println("zipCode:" + Validator.isZipCode("888888"));
    }

2.7.1 isBirthday

生日

2.7.2 isBetween

检查数字是否在指定范围内

2.7.3 isCarDrivingLicence

是否为驾驶证

2.7.4 isChinese

是否全为汉字

2.7.5 isCitizenId

身份证

2.7.6 isEmail

邮箱

2.7.7 isGeneral

验证是否为英文字母 、数字和下划线

2.7.8 isLowerCase

全部小写

2.7.9 isMobile

手机号

2.7.10 isMoney

货币

2.7.11 isUUID

uuid

2.7.12 isWord

是否是字母,(包括大写和小写)

2.7.13 isZipCode

邮政编码