在Maven项目中
在项目的pom.xml的dependencies
中加入以下内容:
cn.hutool
hutool-all
5.5.8
非Maven项目中
点击以下任一链接,下载hutool-all-X.X.X.jar
即可:
注意 Hutool 5.x支持JDK8+,对Android平台没有测试,不能保证所有工具类或工具方法可用。 如果你的项目使用JDK7,请使用Hutool 4.x版本
本文的所有代码均已上传GitHub,HuTool学习
类型转换的工具类为Convert
// int类型转换
int aInt = 1023;
String aStr = Convert.toStr(aInt);
// aStr结果为1023
System.out.println(aStr);
// 数组进行转换
int[] bArray = {1,2,3,4,5};
String bStr = Convert.toStr(bArray);
// bStr结果为[1, 2, 3, 4, 5]
System.out.println(bStr);
String[] strArray = { "1", "0", "2", "3" };
//结果为Integer数组
Integer[] intArray = Convert.toIntArray(strArray);
System.out.println(Convert.toStr(intArray));
Integer[] intArray2 = {1,0,2,3};
//结果为String数组
String[] strArray2 = Convert.toStrArray(intArray2);
System.out.println(Convert.toStr(strArray2));
String date = "2000-10-23";
//结果为Date日期对象
Date value = Convert.toDate(date);
System.out.println(value);
Object[] objectArray = {"lolly1023","lolly",1023};
List> list = Convert.convert(List.class, objectArray);
System.out.println(list);
// 4.1.11版本之后可使用toList
List> list2 = Convert.toList(objectArray);
System.out.println(list2);
日期时间的工具类为DateUtil
// 获取当前时间的Date对象
Date nowDate = DateUtil.date();
System.out.println(nowDate);
// 使用Calendar获取当前时间的Date对象
Date nowDate2 = DateUtil.date(Calendar.getInstance());
System.out.println(nowDate2);
// 使用当前时间戳获取当前时间的Date对象
Date nowDate3 = DateUtil.date(System.currentTimeMillis());
System.out.println(nowDate3);
// 使用工具类获取当前时间的字符串,格式为:yyyy-MM-dd HH:mm:ss
String nowDateStr = DateUtil.now();
System.out.println(nowDateStr);
// 使用工具类获取当前时间的字符串,格式为:yyyy-MM-dd
String todayDateStr= DateUtil.today();
System.out.println(todayDateStr);
输出样式为:
2021-02-19 21:04:12
2021-02-19 21:04:12
2021-02-19 21:04:12
2021-02-19 21:04:12
2021-02-19
字符串转为Date对象使用到了DateUtil
工具类中的parse
方法,该方法会自动识别一些日期的常用格式,例如:
// 字符串转为Date对象
String dateStr = "2000-10-23 12:30";
Date date = DateUtil.parse(dateStr);
// 输出2000-10-23 12:30:00
System.out.println(date);
// 也可以在转的时候指定格式
Date date2 = DateUtil.parse(dateStr,"yyyy-MM-dd");
// 输出2000-10-23 00:00:00
System.out.println(date2);
//格式化Date日期对象
Date date4 = DateUtil.date();
String format = DateUtil.format(date4, "yyyy年MM月dd日");
// 输出为2021年02月19日
System.out.println(format);
String formatDate = DateUtil.formatDate(date4);
// 常用格式化,输出为2021-02-19
System.out.println(formatDate);
String formatDateTime = DateUtil.formatDateTime(date4);
// 精确到秒,结果为2021-02-19 21:16:09
System.out.println(formatDateTime);
String formatTime = DateUtil.formatTime(date4);
// 只保留时分秒,结果为21:16:09
System.out.println(formatTime);
// 获取Date对象的年月日
Date date5 = DateUtil.date();
// 获取年,结果为2021
System.out.println(DateUtil.year(date5));
// 获取月,结果为1(从0开始计数,0则为一月)
System.out.println(DateUtil.month(date5));
// 获取日(在本年)
System.out.println(DateUtil.dayOfYear(date5));
// 获取日(在本月)
System.out.println(DateUtil.dayOfMonth(date5));
// 获取日(在本周)
System.out.println(DateUtil.dayOfWeek(date5));
用于计算开始时间和结束时间,有每天的,每月的,等等
Date date3 = DateUtil.date();
//一天的开始,结果:2021-02-19 00:00:00
Date beginOfDay = DateUtil.beginOfDay(date3);
System.out.println(beginOfDay);
//一天的结束,结果:2021-02-19 23:59:59
Date endOfDay = DateUtil.endOfDay(date3);
System.out.println(endOfDay);
//一月的开始,结果:2021-02-01 00:00:00
Date beginOfMonth = DateUtil.beginOfMonth(date3);
System.out.println(beginOfMonth);
//一月的结束,结果:2021-02-28 23:59:59
Date endOfMonth = DateUtil.endOfMonth(date3);
System.out.println(endOfMonth);
对日期的减少或者添加,可以对时分秒天周月等进行更改
String dateStr2 = "2000-10-23 12:30";
Date date6 = DateUtil.parse(dateStr2);
// 偏移10天
DateTime newDate = DateUtil.offsetDay(date, 10);
// 结果为2000-11-02 12:30:00
System.out.println(newDate);
// 偏移-10天
DateTime newDate2 = DateUtil.offsetDay(date, -10);
// 结果为2000-10-13 12:30:00
System.out.println(newDate2);
/**常用的偏移还有
* 月份 :DateUtil.offsetMonth(newDate2, offset)
* 周:DateUtil.offsetWeek(newDate2, offset)
*/
// 对比这种偏移,还有一种较简单的偏移方法
//昨天
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());
用于计算两个日期直接的时间差
String dateStr3 = "2000-10-23 12:30:00";
Date date7 = DateUtil.parse(dateStr3);
Date date8 = DateUtil.date();
// 计算2000-10-23距今多久:7424天
long betweenDay = DateUtil.between(date7, date8, DateUnit.DAY);
System.out.println(betweenDay);
TimeInterval timer = DateUtil.timer();
try {
// 模拟耗时操作
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//花费毫秒数
System.out.println(timer.interval());
//返回花费时间,并重置开始时间
System.out.println(timer.intervalRestart());
//花费分钟数
System.out.println(timer.intervalMinute());
这个功能还是挺出乎意料的,没想到还有这种
// "天秤座"
String zodiac = DateUtil.getZodiac(Month.OCTOBER.getValue(), 23);
System.out.println(zodiac);
// "龙"
String chineseZodiac = DateUtil.getChineseZodiac(2000);
System.out.println(chineseZodiac);
不得不说,这个工具类小玩意还挺多
//年龄
System.out.println(DateUtil.ageOfNow("2000-10-23"));
//是否闰年
System.out.println(DateUtil.isLeapYear(2000));
// 文件的拷贝
BufferedInputStream in = FileUtil.getInputStream("d:/桌面/HuTool学习.md");
BufferedOutputStream out = FileUtil.getOutputStream("d:/桌面/HuTool学习复制.md");
long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE);
// 拷贝文件的大小
System.out.println(copySize);
System.out.println("拷贝成功");
in.close();
out.close();
用于文件类型的判断,返回值为文件的类型
File file = FileUtil.file("d:/桌面/HuTool学习.md");
String type = FileTypeUtil.getType(file);
//输出的是文件的格式
Console.log(type);
在以前,我们需要监听文件的变化:创建修改删除等,需要进行遍历来定时检查文件,效率很低,性能很差,所以有了这个工具类。
监听指定事件
File file2 = FileUtil.file("example.properties");
//这里只监听文件或目录的修改事件
WatchMonitor watchMonitor = WatchMonitor.create(file2, WatchMonitor.ENTRY_MODIFY);
watchMonitor.setWatcher(new Watcher(){
@Override
public void onCreate(WatchEvent> event, Path currentPath) {
Object obj = event.context();
Console.log("创建:{}-> {}", currentPath, obj);
}
@Override
public void onModify(WatchEvent> event, Path currentPath) {
Object obj = event.context();
Console.log("修改ÿ