HuTool 工具类简单使用

2023-11-15

官方文档

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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HuTool 工具类简单使用 的相关文章

  • 在 mvn 命令中指定 pom.xml 并混合其他项目的目标

    我有多个问题 我可以在 mvn 命令中指定 pom xml 吗 在当前项目上执行 mvn 命令时 我可以混合另一个项目的目标吗 例如 mvn clean otherproject comple otherproject install ot
  • 存根方法时出现 InvalidUseOfMatchersException

    我有这个 TestNG 测试方法代码 InjectMocks private FilmeService filmeService new FilmeServiceImpl Mock private FilmeDAO filmeDao Bef
  • JDK 文档是语言规范的一部分吗?

    只有一名官员Java语言规范 https docs oracle com javase specs jls se8 html index html所有 Java 实现都必须遵守它 API文档怎么样 所有Java实现都需要遵守吗这个版本 ht
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 需要使用 joda 进行灵活的日期时间转换

    我想使用 joda 解析电子邮件中的日期时间字符串 不幸的是我得到了各种不同的格式 例如 Wed 19 Jan 2011 12 52 31 0600 Wed 19 Jan 2011 10 15 34 0800 PST Wed 19 Jan
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复

随机推荐

  • python计算矩阵间的欧式距离

    背景 计算一个M D的二维矩阵与一个N D的二维矩阵各个行向量之间的距离 不用循环来做 如果计算两个一维向量P C的维数相同 则它们的欧氏距离为 化简之后为 我们继而推广 一个一维向量与一个二维矩阵各个行向量的欧氏距离为 再继续推广到一个二
  • Java选择排序

    1 选择排序 选择排序是一种简单直观的排序算法 其基本原理是每一次从待排序的数组里找到最小值 最大值 的下标 然后将最小值 最大值 跟待排序数组的第一个进行交换 然后再从剩余的未排序元素中寻找到最小 大 元素 然后放到已排序的序列的末尾 反
  • 2.Node.js的安装 及 小案例——实现Hello World

    1 编辑器 初期 记事本Ediplus Nodepad 后期 Webstrom Hbuilder 2 Node js的下载 安装 测试 1 下载 http nodejs cn 2 安装 在windows版本操作系统下 直接点击 下一步 即可
  • vue+element在el-table表头添加搜索框实现模糊查询

    页面初始展示 实现模糊查询 gt
  • 如何理解邮件中的“CC、PS、FYI”等英文缩写?

    文章目录 2015年皮卡丘大学毕业初 加入一家总部在荷兰的外企 刚入职邮件中的英文缩写把皮卡丘折磨的晕头转向 比如OOO CC FYI OMW 你知道这些缩写表达的意思吗 01 OOO 是什么意思 OOO千万别理解成 哦哦哦 OOO Out
  • 安装虚拟机VMWare后再装LINUX系统(含避坑指南)

    一 下载 到官网下载虚拟机VMware Download VMware Workstation Pro 二 安装前的电脑设置 不要着急装 不设置好是安装不了的 还会引起暴躁 1 BIOS模式开启intel vt x 一般是禁用的 即 Int
  • 基于Native.js实现Android文件的读写操作

    Native js技术 简称NJS 是一种将手机操作系统的原生对象转义 映射为JS对象 在JS里编写原生代码的技术 我们在进行APP混合开发过程中免不了需要调用Andriod底层的一些API 也免不了可能会涉及到文件读取的操作之类的功能 这
  • Devops

    最近老是碰到这个名词 所以想了解一下这个到底是撒玩意 DevOps Development和Operations的组合词 是一组过程 方法与系统的统称 用于促进开发 应用程序 软件工程 技术运营和质量保障 QA 部门之间的沟通 协作与整合
  • windows利用kubectl命令和vscode远程操作kubenetes(k8s)

    windows 中安装kubecltl 命令 下载地址 http pwittrock github io docs tasks tools install kubectl install with chocolatey on windows
  • java 判断两个list是否相等的方法

    以下示例可以当做一个反面教材 实际是错误的 public static boolean isEquals List
  • 用apache实现禁止IP段或者主机对某个目录的访问

    Allow 指令 说明 控制哪些主机能够访问服务器的一个区域 语法 Allow from all host env env variable host env env variable 上下文 目录 htaccess 覆盖项 Limit 状
  • LayUI系列(一)之layui介绍以及登录功能的实现

    文章目录 一 layui简介 1 1 layui介绍 1 2 主要构成 1 3 迭代历程 1 4 layui easyui和bootstrap对比 1 4 1 layui与bootstrap对比 这两个都属于ui渲染框架 1 4 2 lay
  • TensorFlow框架做实时人脸识别小项目(一)

    人脸识别是深度学习最有价值也是最成熟的的应用之一 在研究环境下 人脸识别已经赶上甚至超过了人工识别的精度 一般来说 一个完整的人脸识别项目会包括两大部分 人脸检测与人脸识别 下面就我近期自己练习写的一个 粗糙 的人脸识别小项目讲起 也算是做
  • 二、关系模型

    关系模型 关系模型由关系数据结构 关系操作集合和关系完整性约束三部分组成 关系数据结构 关系模型的数据结构非常简单 只包含单一的数据结构 关系 域 一组具有相同数据类型的值的集合 笛卡儿积 在域上的一种集合运算 例如A 1 2 B a b
  • NNDL 作业7:第五章课后题(1×1 卷积核

    习题一 证明卷积具有交换性 即证明公式 首先 宽卷积定义为 其中 表示宽卷积运算 我们不妨先设一个二维图像和一个二维卷积核 然后对该二维图像X进行零填充 两端各补U 1 和V 1 个零 得到全填充的图像 现有 根据宽卷积定义 为了让x的下标
  • 学 Python 这么久,终于把类函数 & 成员函数 & 静态函数给整明白了!

    前言 学过 Python 的小伙伴应该知道 在类定义过程中 会依据对具体需求的分析 对类函数 成员函数 静态函数进行声明与定义 Python 基础稍弱的同学可能会对这三个函数的名称有些陌生 但你很有可能曾经见到过他们仨 只是没认出来而已 开
  • el-menu动态渲染多级菜单

    思路 创建子菜单递归组件 这里我命名为MySubMenu vue 父组件 引用自定义组件MySubMenu 将菜单数组传递给子组件
  • qt 信号量 linux 信号量 semctl,Linux信号量 共享内存和消息队列

    Linux信号量 共享内存和消息队列 Linux信号量 共享内存和消息队列 1 信号量 使用信号量可以实现进程间同步 主要函数定义 include int semctl int sem id int sem num int command
  • Chisel 手册 英文版

    Chisel Manual Jonathan Bachrach Huy Vo Krste Asanovi EECS Department UC Berkeley jrb huytbvo krste eecs berkeley edu Apr
  • HuTool 工具类简单使用

    官方文档 https hutool cn docs 简介 Hutool是一个小而全的Java工具类库 通过静态方法封装 降低相关API的学习成本 提高工作效率 使Java拥有函数式语言般的优雅 让Java语言也可以 甜甜的 Hutool中的