官网

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

入门和安装 - 《Hutool v4.5.15 参考文档》 - 书栈网 · BookStack

Java Bean

Bean工具-BeanUtil

ID 生成器

雪花算法

1
2
3
4
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;

String id = IdUtil.getSnowflake(1,1).nextIdStr();

反射工具-ReflectUtil

给对象属性赋值

属性可以是当前类的属性,也可以是父类的属性

1
ReflectUtil.setFieldValue(event, "intro", "123");

根据 Bean 对象和成员变量名,获取变量值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
GbLatzs gbLatzs = new GbLatzs();
gbLatzs.setId("123");
gbLatzs.setEventid("sdfasdf");
gbLatzs.setOrderNum(123);

String id = (String) ReflectUtil.getFieldValue(gbLatzs, "id");
String eventid = (String) ReflectUtil.getFieldValue(gbLatzs, "eventid");
Integer orderNum = (Integer) ReflectUtil.getFieldValue(gbLatzs, "orderNum");
System.out.println("id=" + id);
System.out.println("eventid=" + eventid);
System.out.println("orderNum=" + orderNum);

// 判断对象中是否存在某个字段
// 存在指定字段且值不为空,则放入参数中
Map<String, Object> params = new HashMap<>();
if(ReflectUtil.hasField(event.getClass(), ActivitiConstant.FORM_VARIABLE_MONITOR) && StrUtil.isNotBlank(event.getMonitor())) {
params.put(ActivitiConstant.FORM_VARIABLE_MONITOR, event.getMonitor());
}

日期

当前日期

1
DateTime now = DateUtil.beginOfDay(DateUtil.date()); // 2023-08-29 00:00:00

当前年份

1
2
3
4
int nowYear = DateUtil.year(new Date());

// 或者
int year = DateUtil.thisYear();

当前月份

1
2
3
4
5
int currentMonth = DateUtil.month(new Date()) + 1;
System.out.println("当前月份: " + currentMonth);

//或者
int month = DateUtil.thisMonth() + 1;

DateTime转String

1
2
3
import cn.hutool.core.date.DateUtil;

DateUtil.formatDateTime(miniappEventUser.getCreateTime())

String转DateTime

1
2
3
4
5
6
7
8
9
10
11
import cn.hutool.core.date.DateUtil;

String d = "2020-12-03 20:41:13";

// 只保留年月日
System.out.println(DateUtil.parseDate(d));
// 2020-12-03 00:00:00

// 年月日时分秒
System.out.println(DateUtil.parse(d));
System.out.println(DateUtil.parseDateTime(d));

日期转时间戳

1
2
3
4
5
import cn.hutool.core.date.DateUtil;

String d = "2020-12-03 20:41:13";
System.out.println(DateUtil.parse(d).getTime());
// 1606999273000

时间戳转时间

1
2
3
4
5
6
7
8
// 时间戳转时间
Long time = 1677294413773L;
System.out.println(DateUtil.date(time));
// 2023-02-25 11:06:53

// 计算2个日期间隔秒数
long betweenSecond = DateUtil.between(DateUtil.date(), DateUtil.date(time), DateUnit.SECOND);
System.out.println(betweenSecond);

日期间隔秒数

1
2
3
4
5
6
7
// 计算 2 个日期间隔秒数
Long time = 1677294413773L;
long betweenSecond = DateUtil.between(DateUtil.date(), DateUtil.date(time), DateUnit.SECOND);
System.out.println(betweenSecond);

// 计算当前日期与 limitTime 的时间差,单位秒
DateUtil.between(DateUtil.date(), DateUtil.parse(limitTime), DateUnit.SECOND);

比较 2 个日期

1
2
// 当前日期是否大于 limitTime 
DateUtil.compare(DateUtil.date(), DateUtil.parse(limitTime)) > 0;

判断日期是否在指定2个日期之间

1
2
DateTime now = DateUtil.date();
boolean in = DateUtil.isIn(now, startDateTime, endDateTime);

日期加减

1
2
3
4
5
6
Date limitTime = actZEventTaskTimeoutDeal.getLimitTime();

// 加10个小时后的日期
Date warnDateTime = DateUtil.offsetHour(limitTime, 10);
// 减10天前的日期
Date warnDateTime = DateUtil.offsetDay(limitTime, -10);

身份证号

1
2
3
4
5
6
7
8
9
10
11
// 引入hutool工具包
import cn.hutool.core.util.IdcardUtil;

// 根据身份证号获取年龄
int age = IdcardUtil.getAgeByIdCard(idCard);

// 根据身份证号获取性别
String gender = IdcardUtil.getGenderByIdCard(idCard);

// 根据身份证号获取出生日期
String birth = IdcardUtil.getBirthByIdCard(idCard);

中文分词

中文分词封装-TokenizerUtil (hutool.cn)

线程池 ExecutorService

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
 ExecutorService executor = ExecutorBuilder.create()
.setCorePoolSize(5)
.setMaxPoolSize(5)
.build();

long start = System.currentTimeMillis();
Set<Long> threadIds = new HashSet<Long>();
for (int i = 0; i < 100; i++) {
int index = i;
executor.submit(()->{
long id = Thread.currentThread().getId();
threadIds.add(id);
System.out.println("大家好,我的任务编号是:" + index + " thread-Id:" + id);
});
}

executor.shutdown();

//等待直到所有任务完成,才能执行后面代码
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES);
System.out.println(threadIds);

long end = System.currentTimeMillis();
System.out.println("耗时:" + (end-start) + "ms");
} catch (InterruptedException e) {
e.printStackTrace();
}

比较工具-CompareUtil

1
2
3
4
// 当isNullGreater为true时,null始终最大,此处返回的compare > 0
int compare = CompareUtil.compare(null, "a", true);
// 当isNullGreater为false时,null始终最小,此处返回的compare < 0
int compare = CompareUtil.compare(null, "a", false);

DB数据库操作

概述 | Hutool

1
2
3
4
5
6
7
8
9
10
11
DynamicRoutingDataSource dynamicRoutingDataSource = (DynamicRoutingDataSource) SpringContextUtils.getApplicationContext().getBean(DataSource.class);
// 当前数据源
DataSource datasource = dynamicRoutingDataSource.determineDataSource();

// 当前连接
Connection connection = datasource.getConnection();

List<Entity> entityList = SqlExecutor.query(connection, "select * from " + tableName + " where id = ?", new EntityListHandler(), id);

int count = SqlExecutor.execute(connection, "insert into "+ CommonConstant.DATA_TRASH_TABLE_NAME + "(id, create_by, create_time, data_id, data_content, insert_sql) values (?,?,?,?,?,?)",
trash_data_id, username, DateUtils.now(), id, dataContent, insert_sql);

BeanUtil

cn.hutool.core.bean.BeanUtil

对象拷贝,忽略指定字段

1
BeanUtil.copyProperties(sourceObj, targetObj, "id", "createBy", "createTime","updateBy","sysOrgCode","updateTime");

IoUtil

1
2
3
4
5
// 输出到 response
IoUtil.write(response.getOutputStream(), true, exportBytes);

// inputStream 转 byte
byte[] bytes = IOUtils.toByteArray(inputStream);

CreditCodeUtil - 统一社会信用代码工具类

HttpUtil 请求工具

1
2
3
4
5
6
try {
HttpUtil.downloadFile("https://picx.zhimg.com/v2-c8099804ebfcabdc6cd3f99373c35c2e_r.jpg?source=1def8aca", new File("/Users/wangwz/Downloads/1.jpg"), 100); // 超时时间 100ms
} catch (Exception e) {
// 超时
System.out.println(e.getMessage());
}