前言
工作也有两年多得时间了,发现不管哪个项目组都有其自己的一些小工具类,这些开袋即食的工具让我们的工作效率得到了提升,所以博主就利用空闲时间整理了一份工具类集合,其中包括了常用的日期工具类、字符串处理的工具类、Excel导入导出的工具类等。此工具类比较适合喜欢自己敲一些小玩意的伙伴。
字符串工具类
方法文档截图
测试案例
public class StringUtilDemo {
public static void main(String[] args) throws Exception {
fun1(); //判断字符串是否为空
fun2(); //格式化字符串到指定长度,长度不够空格来凑
fun3(); //获取流水号
fun4(); //给字符串增加指定个数的0
fun5(); //字符串转集合
fun6(); //移除字符串
}
public static void fun1(){
String str = " ";
String str1="Hello";
System.out.println("----------------------------判断字符串是否为空的方法-------------------start");
System.out.println("字符串str为空?:"+StringUtils.isEmpty(str));
System.out.println("字符串str1为空?:"+StringUtils.isEmpty(str1));
System.out.println("字符串str去掉首尾空格为空?:"+StringUtils.isTrimEmpty(str));
System.out.println("字符串str1去掉首尾空格为空?:"+StringUtils.isTrimEmpty(str1));
System.out.println("字符串str不为空?:"+StringUtils.isNotEmpty(str));
System.out.println("字符串str1不为空?:"+StringUtils.isNotEmpty(str1));
System.out.println("字符串str去掉首尾空格不为空?:"+StringUtils.isTrimNotEmpty(str));
System.out.println("字符串str1去掉首尾空格不为空?:"+StringUtils.isTrimNotEmpty(str1));
System.out.println("----------------------------判断字符串是否为空的方法---------------------end");
}
public static void fun2() throws Exception{
System.out.println("----------------------------格式化字符串的方法---------------------start");
String a ="";
String b =null;
String c = "hello";
String d = "hah";
String e = "i am big man";
System.out.println(StringUtils.stringFormat(a, 5, "UTF-8")+"的长度为:"+StringUtils.stringFormat(a, 5, "UTF-8").length());
System.out.println(StringUtils.stringFormat(b, 5, "UTF-8")+"的长度为:"+StringUtils.stringFormat(b, 5, "UTF-8").length());
System.out.println(StringUtils.stringFormat(c, 5, "UTF-8")+"的长度为:"+StringUtils.stringFormat(c, 5, "UTF-8").length());
System.out.println(StringUtils.stringFormat(d, 5, "UTF-8")+"的长度为:"+StringUtils.stringFormat(d, 5, "UTF-8").length());
System.out.println(StringUtils.stringFormat(e, 5, "UTF-8")+"的长度为:"+StringUtils.stringFormat(e, 5, "UTF-8").length());
System.out.println("----------------------------格式化字符串的方法---------------------end");
}
public static void fun3(){
System.out.println("----------------------------获取流水号的方法---------------------start");
System.out.println(StringUtils.getSerialNo());
System.out.println(StringUtils.getSerialNo("DH",""));
System.out.println(StringUtils.getUUID());
System.out.println(StringUtils.getRandomFileName());
System.out.println("----------------------------获取流水号的方法---------------------end");
}
public static void fun4(){
System.out.println("----------------------------给字符串增加指定个数的0方法---------------------start");
System.out.println(StringUtils.addPrefixZero("前面有五个零", 5));
System.out.println(StringUtils.addSuffixZero("后面有八个零", 8));
double a = 45.54545;
int b = 43546;
float c = (float) 435.46004646;
long d = 435364747;
System.out.println(StringUtils.getKeepDecial(a, 2));
System.out.println(StringUtils.getKeepDecial(b,3));
System.out.println(StringUtils.getKeepDecial(c, 4));
System.out.println(StringUtils.getKeepDecial(d, 5));
System.out.println("----------------------------给字符串增加指定个数的0方法---------------------end");
}
public static void fun5(){
System.out.println("----------------------------将字符串拆分转换成集合---------------------start");
String str = "sdasmdsa,sdasf,sfsaf,sfgh,uu,uj,twe,i";
String str2 = "1323|43545|787|544|65757";
List<String> list = StringUtils.transferToList(str,",");
List<Integer> list1 = StringUtils.transferToList(str2,"\\|");
System.out.println(list);
System.out.println(list1);
System.out.println("----------------------------将字符串拆分转换成集合---------------------end");
}
public static void fun6(){
System.out.println("----------------------------移除字符串操作---------------------start");
String str = "ggghhh34535.00000";
String str1 = "000400034535.3434300000";
String str2 = "hhhhh4334535.0000054545hhhhh";
String str3 = "hhh4444hh4343455345.054400550054545hhh5hh";
System.out.println(StringUtils.removeLeftStr(str, 'g'));
System.out.println(StringUtils.removeRightStr(str1,'0'));
System.out.println(StringUtils.removeSidesStr(str2, 'h'));
System.out.println(StringUtils.removeAllStr(str3, '4'));
System.out.println(StringUtils.removeStrByDirection(str2, 'h', "sides"));
System.out.println("----------------------------移除字符串操作---------------------end");
}
}
结果展示:
----------------------------判断字符串是否为空的方法-------------------start
字符串str为空?:false
字符串str1为空?:false
字符串str去掉首尾空格为空?:true
字符串str1去掉首尾空格为空?:false
字符串str不为空?:true
字符串str1不为空?:true
字符串str去掉首尾空格不为空?:false
字符串str1去掉首尾空格不为空?:true
----------------------------判断字符串是否为空的方法---------------------end
----------------------------格式化字符串的方法---------------------start
的长度为:5
的长度为:5
hello的长度为:5
hah 的长度为:5
i am 的长度为:5
----------------------------格式化字符串的方法---------------------end
----------------------------获取流水号的方法---------------------start
2023033000822463
DH2023033099252266
f1ffdfd0e66e48b28481483663f276eb
FILE5805320230330
----------------------------获取流水号的方法---------------------end
----------------------------给字符串增加指定个数的0方法---------------------start
00000前面有五个零
后面有八个零00000000
45.55
43546.000
435.4601
435364747.00000
----------------------------给字符串增加指定个数的0方法---------------------end
----------------------------将字符串拆分转换成集合---------------------start
[sdasmdsa, sdasf, sfsaf, sfgh, uu, uj, twe, i]
[1323, 43545, 787, 544, 65757]
----------------------------将字符串拆分转换成集合---------------------end
----------------------------移除字符串操作---------------------start
hhh34535.00000
000400034535.34343
4334535.0000054545
hhhhh335535.05005500555hhh5hh
4334535.0000054545
----------------------------移除字符串操作---------------------end
进程已结束,退出代码0
日期工具类
方法文档截图
测试案例截图
public class DateUtilsDemo {
public static Date date= new Date();
public static String sDate = "2022-02-02";
public static String sDate1 = "20220202";
public static String sDate2 = "2022-02-02 19:23:23";
public static String sDate3 = "2022-02-02 23:53:54:235";
public static String sDate4 = "2022-02-10 23:53:54";
public static void main(String[] args) {
fun1(); //日期格式化
fun2(); //解析日期
fun3(); //获取起始截止日期
fun4(); //获取时间数字
fun5(); //获取星期几
fun6(); //获取本年的第几周
fun7(); //日期加减计算
fun8(); //获取日期集合
fun9(); //日期比较
}
public static void fun1() {
System.out.println("-----------------------------将Date类型日期转换成字符串类型日期-----------------------------------start");
//将date类型的时间转换成字符串时间格式:yyyy-MM-dd
System.out.println(DateUtils.formatDate(date));
//将date类型的时间转换成字符串时间格式:yyyy-MM-dd HH:mm:ss
System.out.println(DateUtils.formatDateTime(date));
//将date类型的时间转换成字符串时间格式:yyyy-MM-dd HH:mm:ss:SSS
System.out.println(DateUtils.formatDateTimeStamp(date));
//将date类型的时间转换成任意格式的字符串时间格式:yyyy/MM/dd yyyyMMdd yyyy/MM
System.out.println(DateUtils.format(date, "yyyy/MM/dd"));
System.out.println("-----------------------------将Date类型日期转换成字符串类型日期-----------------------------------end");
}
public static void fun2() {
System.out.println("-----------------------------将字符串类型日期转换成Date类型日期-----------------------------------start");
//将字符串格式的时间转换成 date类型时间格式:字符串只能是 yyyy-MM-dd 格式
System.out.println(DateUtils.parseDate(sDate));
//将字符串格式的时间转换成 date类型时间格式:字符串只能是 yyyy-MM-dd HH:mm:ss 格式
System.out.println(DateUtils.parseDateTime(sDate2));
//将字符串格式的时间转换成 date类型时间格式:字符串只能是 yyyy-MM-dd HH:mm:ss:SSS 格式
System.out.println(DateUtils.parseDateTime(sDate3));
//将字符串格式的时间转换成 date类型时间格式:字符串与格式应该一一对应,如: 20220202-yyyyMMdd
System.out.println(DateUtils.parse(sDate1,"yyyyMMdd"));
System.out.println("-----------------------------将字符串类型日期转换成Date类型日期-----------------------------------end");
}
public static void fun3() {
System.out.println("-----------------------------获取起始的截止日期-----------------------------------start");
//获取日期当天的开始时间(即0点0分0秒) -分别返回Date类型和String类型的日期
System.out.println("日期:"+date+"的开始时间为:"+DateUtils.getDateStart(date));
System.out.println("日期:"+sDate+"的开始时间为:"+DateUtils.getDateStart(sDate, "yyyy-MM-dd"));
//获取一天的截止时间(即:23 点 59 分 59 秒 999 毫秒)-分别返回Date类型和String类型的日期
System.out.println("日期:"+date+"的截止时间为:"+DateUtils.getDateEnd(date));
System.out.println("日期:"+sDate1+"的截止时间为:"+DateUtils.getDateEnd(sDate1, "yyyyMMdd"));
//获取日期所在周的开始时间: 即周一的0点0分0秒0毫秒 -分别返回Date类型和String类型的日期
System.out.println("日期:"+date+"所在周的开始时间为:"+DateUtils.getWeekDateStart(date));
System.out.println("日期:"+sDate2+"所在周的开始时间为:"+DateUtils.getWeekDateStart(sDate2, "yyyy-MM-dd HH:mm:ss"));
//获取日期所在周的截止时间: 即周一的23点59分59秒999毫秒 -分别返回Date类型和String类型的日期
System.out.println("日期:"+date+"所在周的截止时间为:"+DateUtils.getWeekDateEnd(date));
System.out.println("日期:"+sDate2+"所在周的截止时间为:"+DateUtils.getWeekDateEnd(sDate2, "yyyy-MM-dd HH:mm:ss"));
//获取日期所在月的开始时间: 即所在月1号的0点0分0秒0毫秒 -分别返回Date类型和String类型的日期
System.out.println("日期:"+date+"所在月的开始时间为:"+DateUtils.getMonthDateStart(date));
System.out.println("日期:"+sDate2+"所在月的开始时间为:"+DateUtils.getMonthDateStart(sDate2, "yyyy-MM-dd HH:mm:ss"));
//获取日期所在月的截止时间: 即所在月最后一天的23点59分59秒999毫秒 -分别返回Date类型和String类型的日期
System.out.println("日期:"+date+"所在月的截止时间为:"+DateUtils.getMonthDateEnd(date));
System.out.println("日期:"+sDate2+"所在月的截止时间为:"+DateUtils.getMonthDateEnd(sDate2, "yyyy-MM-dd HH:mm:ss"));
System.out.println("-----------------------------获取起始的截止日期-----------------------------------end");
}
public static void fun4() {
System.out.println("-----------------------------获取时间数字-----------------------------------start");
//获取时间数字-精确到天-yyyyMMdd
System.out.println("日期:"+date+"精确到天为:"+DateUtils.getDateNo(date));
//获取时间数字-精确到秒-yyyyMMdd HH:mm:ss
System.out.println("日期:"+date+"精确到秒为:"+DateUtils.getDateTimeNo(date));
//获取时间数字-精确到毫秒-yyyyMMdd HH:mm:ss:SSS
System.out.println("日期:"+date+"精确到毫秒为:"+DateUtils.getDateTimeStampNo(date));
System.out.println("-----------------------------获取时间数字----------------------------------end");
}
public static void fun5() {
System.out.println("-----------------------------获取日期为周几-----------------------------------start");
//获取该日期为周几-参数为Date类型
System.out.println("日期:"+date+"是周"+DateUtils.getWeek(date));
//获取该日期为周几-参数为String类型的日期
System.out.println("日期:"+sDate2+"是周"+DateUtils.getWeek(sDate2, "yyyy-MM-dd HH:mm:ss"));
//获取该日期为周几-参数为空时返回0
System.out.println("日期: 是周"+DateUtils.getWeek("", "yyyyMMdd HH:mm:ss"));
//获取该日期所在周指定星期的日期-参数为Date类型
System.out.println("日期:"+date+"所在周的周五的日期为:"+DateUtils.getWeekDate(date, 5));
//获取该日期所在周指定星期的日期-参数为String类型
System.out.println("日期:"+sDate2+"所在周的周五的日期为:"+DateUtils.getWeekDate(sDate2, "yyyy-MM-dd HH:mm:ss", 5));
System.out.println("-----------------------------获取日期为周几-----------------------------------end");
}
public static void fun6() {
System.out.println("-----------------------------获取日期是本年的第几周-----------------------------------start");
//获取该日期为本年的第几周(从本年的第一个周一开始算)-参数为Date类型
System.out.println("日期:"+date+"是本年的第"+DateUtils.getWeekOfYear(date)+"周");
//获取该日期为本年的第几周(从本年的第一天开始算)-参数为Date类型
System.out.println("日期:"+date+"是本年的第"+DateUtils.getWeekOfYearIgnoreLastYear(date)+"周");
//获取该日期为本年的第几周(从本年的第一个周一开始算)-参数为String类型
System.out.println("日期:"+sDate2+"是本年的第"+DateUtils.getWeekOfYear(sDate2,"yyyy-MM-dd HH:mm:ss")+"周");
//获取该日期为本年的第几周(从本年的第一天开始算)-参数为String类型
System.out.println("日期:"+sDate2+"是本年的第"+DateUtils.getWeekOfYearIgnoreLastYear(sDate2,"yyyy-MM-dd HH:mm:ss")+"周");
System.out.println("-----------------------------获取日期是本年的第几周-----------------------------------end");
}
public static void fun7() {
System.out.println("-----------------------------日期加减计算-----------------------------------start");
//日期加减-年份加20年
System.out.println("日期:"+date+",年份加上20年后是:"+DateUtils.add(date, Calendar.YEAR, 20));
System.out.println("日期:"+sDate2+",年份减去20年后是:"+DateUtils.add(sDate2, "yyyy-MM-dd HH:mm:ss", Calendar.YEAR, -20));
//年份加减
System.out.println("日期:"+date+",年份加上20年后是:"+DateUtils.addYear(date, 20));
System.out.println("日期:"+sDate2+",年份减去20年后是:"+DateUtils.addYear(sDate2, "yyyy-MM-dd HH:mm:ss", -20));
//月份加减
System.out.println("日期:"+date+",月份加上8个月后是:"+DateUtils.addMonth(date, 8));
System.out.println("日期:"+sDate2+",月份减去8个月后是:"+DateUtils.addMonth(sDate2, "yyyy-MM-dd HH:mm:ss", -8));
//天数加减
System.out.println("日期:"+date+",天数加上5后是:"+DateUtils.addDay(date, 5));
System.out.println("日期:"+sDate2+",天数减去3天后是:"+DateUtils.addDay(sDate2, "yyyy-MM-dd HH:mm:ss", -3));
//星期数加减
System.out.println("日期:"+date+",加上3个星期后是:"+DateUtils.addWeek(date, 3));
System.out.println("日期:"+sDate2+",减去2个星期后是:"+DateUtils.addWeek(sDate2, "yyyy-MM-dd HH:mm:ss", -2));
//小时数加减
System.out.println("日期:"+date+",加上6个小时后是:"+DateUtils.addHour(date, 6));
System.out.println("日期:"+sDate2+",减去1个小时后是:"+DateUtils.addHour(sDate2, "yyyy-MM-dd HH:mm:ss", -1));
//分钟数加减
System.out.println("日期:"+date+",加上30分钟后是:"+DateUtils.addMinute(date, 30));
System.out.println("日期:"+sDate2+",减去50分钟后是:"+DateUtils.addMinute(sDate2, "yyyy-MM-dd HH:mm:ss", -50));
//秒数加减
System.out.println("日期:"+date+",加上60秒后是:"+DateUtils.addSecond(date, 60));
System.out.println("日期:"+sDate2+",减去40秒后是:"+DateUtils.addSecond(sDate2, "yyyy-MM-dd HH:mm:ss", -40));
//毫秒数加减
System.out.println("日期:"+date+",加上1000毫秒后是:"+DateUtils.addMillisecond(date, 1000));
System.out.println("日期:"+sDate3+",减去80毫秒后是:"+DateUtils.addMillisecond(sDate3, "yyyy-MM-dd HH:mm:ss:SSS", -80));
System.out.println("-----------------------------日期加减计算-----------------------------------end");
}
public static void fun8() {
System.out.println("-----------------------------获取日期集合-----------------------------------start");
//获取两个日期之间的所有日期的时间(不包含首尾的日期;返回list<Date>类型)
Date date1 = DateUtils.parse(sDate2, "yyyy-MM-dd HH:mm:ss");
Date date2 = DateUtils.parse(sDate4, "yyyy-MM-dd HH:mm:ss");
List<Date> dateList1 = DateUtils.getBetweenDateList(date1, date2);
System.out.println("在日期:"+date1+"和日期:"+date2+"之间所有的日期为(不包含起始日期):"+dateList1+" 共有:"+dateList1.size()+"天");
//获取两个日期之间的所有日期的时间(true表示包含首尾日期,false不包含;返回list<Date>类型)
List<Date> dateList2 = DateUtils.getBetweenDateList(date1, date2,true);
System.out.println("在日期:"+date1+"和日期:"+date2+"之间所有的日期为(包含起始日期):"+dateList2+" 共有:"+dateList2.size()+"天");
//获取两个日期之间的所有日期的时间(不包含首尾的日期;返回list<String>类型)
List<String> dateList3 = DateUtils.getBetweenDateList(sDate2, sDate4,"yyyy-MM-dd HH:mm:ss");
System.out.println("在日期:"+sDate2+"和日期:"+sDate4+"之间所有的日期为(不包含起始日期):"+dateList3+" 共有:"+dateList3.size()+"天");
//获取两个日期之间的所有日期的时间(true表示包含首尾日期,false不包含;返回list<String>类型)
List<String> dateList4 = DateUtils.getBetweenDateList(sDate2, sDate4,"yyyy-MM-dd HH:mm:ss",true);
System.out.println("在日期:"+sDate2+"和日期:"+sDate4+"之间所有的日期为(包含起始日期):"+dateList4+" 共有:"+dateList4.size()+"天");
//将list<Date>集合转list<String>集合
System.out.println(DateUtils.getDateStrList(dateList1)+" 共有:"+dateList1.size()+"天");
System.out.println(DateUtils.getDateStrList(dateList2, "yyyy-MM-dd HH:mm:ss")+" 共有:"+dateList2.size()+"天");
//获取该日期所在周的所有日期
System.out.println(DateUtils.getWeekDateList(date));
System.out.println(DateUtils.getWeekDateList(sDate2,"yyyy-MM-dd HH:mm:ss"));
//获取该日期所在月的所有日期
System.out.println(DateUtils.getMonthDateList(date));
System.out.println(DateUtils.getMonthDateList(sDate2,"yyyy-MM-dd HH:mm:ss"));
System.out.println("-----------------------------获取日期集合-----------------------------------end");
}
public static void fun9() {
System.out.println("-----------------------------日期比较-----------------------------------start");
Date date = DateUtils.parse(sDate2,"yyyy-MM-dd HH:mm:ss");
Date date1 = DateUtils.parse(sDate4,"yyyy-MM-dd HH:mm:ss");
//日期比较
System.out.println(DateUtils.dateCompare(date, date1, CompareType.D));
System.out.println(DateUtils.dateCompare(sDate2, sDate4, "yyyy-MM-dd HH:mm:ss", CompareType.H));
//判断是否包含在源日期的多天少天内
System.out.println(DateUtils.isInAvailablePeriod(date1, date, 8));
System.out.println(DateUtils.isInAvailablePeriod(sDate2, sDate4,"yyyy-MM-dd HH:mm:ss", 9));
System.out.println("-----------------------------日期比较-----------------------------------end");
}
}
结果展示:
-----------------------------将Date类型日期转换成字符串类型日期-----------------------------------start
2023-03-30
2023-03-30 10:09:21
2023-03-30 10:09:21:546
2023/03/30
-----------------------------将Date类型日期转换成字符串类型日期-----------------------------------end
-----------------------------将字符串类型日期转换成Date类型日期-----------------------------------start
Wed Feb 02 00:00:00 CST 2022
Wed Feb 02 19:23:23 CST 2022
Wed Feb 02 23:53:54 CST 2022
Wed Feb 02 00:00:00 CST 2022
-----------------------------将字符串类型日期转换成Date类型日期-----------------------------------end
-----------------------------获取起始的截止日期-----------------------------------start
日期:Thu Mar 30 10:09:21 CST 2023的开始时间为:Thu Mar 30 00:00:00 CST 2023
日期:2022-02-02的开始时间为:2022-02-02
日期:Thu Mar 30 10:09:21 CST 2023的截止时间为:Thu Mar 30 23:59:59 CST 2023
日期:20220202的截止时间为:20220202
日期:Thu Mar 30 10:09:21 CST 2023所在周的开始时间为:Mon Mar 27 00:00:00 CST 2023
日期:2022-02-02 19:23:23所在周的开始时间为:2022-01-31 00:00:00
日期:Thu Mar 30 10:09:21 CST 2023所在周的截止时间为:Sun Apr 02 23:59:59 CST 2023
日期:2022-02-02 19:23:23所在周的截止时间为:2022-02-06 23:59:59
日期:Thu Mar 30 10:09:21 CST 2023所在月的开始时间为:Wed Mar 01 00:00:00 CST 2023
日期:2022-02-02 19:23:23所在月的开始时间为:2022-02-01 00:00:00
日期:Thu Mar 30 10:09:21 CST 2023所在月的截止时间为:Fri Mar 31 23:59:59 CST 2023
日期:2022-02-02 19:23:23所在月的截止时间为:2022-02-28 23:59:59
-----------------------------获取起始的截止日期-----------------------------------end
-----------------------------获取时间数字-----------------------------------start
日期:Thu Mar 30 10:09:21 CST 2023精确到天为:20230330
日期:Thu Mar 30 10:09:21 CST 2023精确到秒为:20230330100921
日期:Thu Mar 30 10:09:21 CST 2023精确到毫秒为:20230330100921546
-----------------------------获取时间数字----------------------------------end
-----------------------------获取日期为周几-----------------------------------start
日期:Thu Mar 30 10:09:21 CST 2023是周4
日期:2022-02-02 19:23:23是周3
日期: 是周0
日期:Thu Mar 30 10:09:21 CST 2023所在周的周五的日期为:Fri Mar 31 10:09:21 CST 2023
日期:2022-02-02 19:23:23所在周的周五的日期为:2022-02-04 19:23:23
-----------------------------获取日期为周几-----------------------------------end
-----------------------------获取日期是本年的第几周-----------------------------------start
日期:Thu Mar 30 10:09:21 CST 2023是本年的第13周
日期:Thu Mar 30 10:09:21 CST 2023是本年的第13周
日期:2022-02-02 19:23:23是本年的第5周
日期:2022-02-02 19:23:23是本年的第5周
-----------------------------获取日期是本年的第几周-----------------------------------end
-----------------------------日期加减计算-----------------------------------start
日期:Thu Mar 30 10:09:21 CST 2023,年份加上20年后是:Mon Mar 30 10:09:21 CST 2043
日期:2022-02-02 19:23:23,年份减去20年后是:2002-02-02 19:23:23
日期:Thu Mar 30 10:09:21 CST 2023,年份加上20年后是:Mon Mar 30 10:09:21 CST 2043
日期:2022-02-02 19:23:23,年份减去20年后是:2002-02-02 19:23:23
日期:Thu Mar 30 10:09:21 CST 2023,月份加上8个月后是:Thu Nov 30 10:09:21 CST 2023
日期:2022-02-02 19:23:23,月份减去8个月后是:2021-06-02 19:23:23
日期:Thu Mar 30 10:09:21 CST 2023,天数加上5后是:Tue Apr 04 10:09:21 CST 2023
日期:2022-02-02 19:23:23,天数减去3天后是:2022-01-30 19:23:23
日期:Thu Mar 30 10:09:21 CST 2023,加上3个星期后是:Thu Apr 20 10:09:21 CST 2023
日期:2022-02-02 19:23:23,减去2个星期后是:2022-01-19 19:23:23
日期:Thu Mar 30 10:09:21 CST 2023,加上6个小时后是:Thu Mar 30 16:09:21 CST 2023
日期:2022-02-02 19:23:23,减去1个小时后是:2022-02-02 18:23:23
日期:Thu Mar 30 10:09:21 CST 2023,加上30分钟后是:Thu Mar 30 10:39:21 CST 2023
日期:2022-02-02 19:23:23,减去50分钟后是:2022-02-02 18:33:23
日期:Thu Mar 30 10:09:21 CST 2023,加上60秒后是:Thu Mar 30 10:10:21 CST 2023
日期:2022-02-02 19:23:23,减去40秒后是:2022-02-02 19:22:43
日期:Thu Mar 30 10:09:21 CST 2023,加上1000毫秒后是:Thu Mar 30 10:09:22 CST 2023
日期:2022-02-02 23:53:54:235,减去80毫秒后是:2022-02-02 23:53:54:155
-----------------------------日期加减计算-----------------------------------end
-----------------------------获取日期集合-----------------------------------start
在日期:Wed Feb 02 19:23:23 CST 2022和日期:Thu Feb 10 23:53:54 CST 2022之间所有的日期为(不包含起始日期):[Thu Feb 03 00:00:00 CST 2022, Fri Feb 04 00:00:00 CST 2022, Sat Feb 05 00:00:00 CST 2022, Sun Feb 06 00:00:00 CST 2022, Mon Feb 07 00:00:00 CST 2022, Tue Feb 08 00:00:00 CST 2022, Wed Feb 09 00:00:00 CST 2022] 共有:7天
在日期:Wed Feb 02 19:23:23 CST 2022和日期:Thu Feb 10 23:53:54 CST 2022之间所有的日期为(包含起始日期):[Wed Feb 02 00:00:00 CST 2022, Thu Feb 03 00:00:00 CST 2022, Fri Feb 04 00:00:00 CST 2022, Sat Feb 05 00:00:00 CST 2022, Sun Feb 06 00:00:00 CST 2022, Mon Feb 07 00:00:00 CST 2022, Tue Feb 08 00:00:00 CST 2022, Wed Feb 09 00:00:00 CST 2022, Thu Feb 10 00:00:00 CST 2022] 共有:9天
在日期:2022-02-02 19:23:23和日期:2022-02-10 23:53:54之间所有的日期为(不包含起始日期):[2022-02-03 00:00:00, 2022-02-04 00:00:00, 2022-02-05 00:00:00, 2022-02-06 00:00:00, 2022-02-07 00:00:00, 2022-02-08 00:00:00, 2022-02-09 00:00:00] 共有:7天
在日期:2022-02-02 19:23:23和日期:2022-02-10 23:53:54之间所有的日期为(包含起始日期):[2022-02-02 00:00:00, 2022-02-03 00:00:00, 2022-02-04 00:00:00, 2022-02-05 00:00:00, 2022-02-06 00:00:00, 2022-02-07 00:00:00, 2022-02-08 00:00:00, 2022-02-09 00:00:00, 2022-02-10 00:00:00] 共有:9天
[2022-02-03, 2022-02-04, 2022-02-05, 2022-02-06, 2022-02-07, 2022-02-08, 2022-02-09] 共有:7天
[2022-02-02 00:00:00, 2022-02-03 00:00:00, 2022-02-04 00:00:00, 2022-02-05 00:00:00, 2022-02-06 00:00:00, 2022-02-07 00:00:00, 2022-02-08 00:00:00, 2022-02-09 00:00:00, 2022-02-10 00:00:00] 共有:9天
[Mon Mar 27 00:00:00 CST 2023, Tue Mar 28 00:00:00 CST 2023, Wed Mar 29 00:00:00 CST 2023, Thu Mar 30 00:00:00 CST 2023, Fri Mar 31 00:00:00 CST 2023, Sat Apr 01 00:00:00 CST 2023, Sun Apr 02 00:00:00 CST 2023]
[2022-01-31 00:00:00, 2022-02-01 00:00:00, 2022-02-02 00:00:00, 2022-02-03 00:00:00, 2022-02-04 00:00:00, 2022-02-05 00:00:00, 2022-02-06 00:00:00]
[Wed Mar 01 00:00:00 CST 2023, Thu Mar 02 00:00:00 CST 2023, Fri Mar 03 00:00:00 CST 2023, Sat Mar 04 00:00:00 CST 2023, Sun Mar 05 00:00:00 CST 2023, Mon Mar 06 00:00:00 CST 2023, Tue Mar 07 00:00:00 CST 2023, Wed Mar 08 00:00:00 CST 2023, Thu Mar 09 00:00:00 CST 2023, Fri Mar 10 00:00:00 CST 2023, Sat Mar 11 00:00:00 CST 2023, Sun Mar 12 00:00:00 CST 2023, Mon Mar 13 00:00:00 CST 2023, Tue Mar 14 00:00:00 CST 2023, Wed Mar 15 00:00:00 CST 2023, Thu Mar 16 00:00:00 CST 2023, Fri Mar 17 00:00:00 CST 2023, Sat Mar 18 00:00:00 CST 2023, Sun Mar 19 00:00:00 CST 2023, Mon Mar 20 00:00:00 CST 2023, Tue Mar 21 00:00:00 CST 2023, Wed Mar 22 00:00:00 CST 2023, Thu Mar 23 00:00:00 CST 2023, Fri Mar 24 00:00:00 CST 2023, Sat Mar 25 00:00:00 CST 2023, Sun Mar 26 00:00:00 CST 2023, Mon Mar 27 00:00:00 CST 2023, Tue Mar 28 00:00:00 CST 2023, Wed Mar 29 00:00:00 CST 2023, Thu Mar 30 00:00:00 CST 2023, Fri Mar 31 00:00:00 CST 2023]
[2022-02-01 00:00:00, 2022-02-02 00:00:00, 2022-02-03 00:00:00, 2022-02-04 00:00:00, 2022-02-05 00:00:00, 2022-02-06 00:00:00, 2022-02-07 00:00:00, 2022-02-08 00:00:00, 2022-02-09 00:00:00, 2022-02-10 00:00:00, 2022-02-11 00:00:00, 2022-02-12 00:00:00, 2022-02-13 00:00:00, 2022-02-14 00:00:00, 2022-02-15 00:00:00, 2022-02-16 00:00:00, 2022-02-17 00:00:00, 2022-02-18 00:00:00, 2022-02-19 00:00:00, 2022-02-20 00:00:00, 2022-02-21 00:00:00, 2022-02-22 00:00:00, 2022-02-23 00:00:00, 2022-02-24 00:00:00, 2022-02-25 00:00:00, 2022-02-26 00:00:00, 2022-02-27 00:00:00, 2022-02-28 00:00:00]
-----------------------------获取日期集合-----------------------------------end
-----------------------------日期比较-----------------------------------start
8
196
false
true
-----------------------------日期比较-----------------------------------end
进程已结束,退出代码0
Excel导入导出工具类
方法文档截图
导入测试案例截图
这里就简单展示下效果图,因为本工具类参考以下文章
https://zyqok.blog.csdn.net/article/details/121994504?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121994504-blog-127287322.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121994504-blog-127287322.pc_relevant_default&utm_relevant_index=2
具体的测试效果可自行去看,本工具只是修改了部分BUG以及优化而来
public class ImportExcelDemo {
/****将导入的表格转为JSON数组****/
@PostMapping("/importJsonArray")
public JSONArray importJsonArray(@RequestPart("file")MultipartFile file) throws Exception {
JSONArray array = ExcelUtils.readMultipartFile(file);
System.out.println("导入数据为:" + array);
return array;
}
/****将导入的表格转为对象list****/
@PostMapping("/importObjectList")
public void importObjectList(@RequestPart("file")MultipartFile file) throws Exception {
List<UserEntity> users = ExcelUtils.readMultipartFile(file, UserEntity.class);
for (UserEntity user : users) {
System.out.println("导入的数据为:"+user.toString());
}
}
/****导入多个sheet页的表格****/
@PostMapping("/importManySheet")
public void upload(@RequestPart("file") MultipartFile file) throws Exception {
Map<String, JSONArray> map = ExcelUtils.readFileManySheet(file);
map.forEach((key, value) -> {
System.out.println("Sheet名称:" + key);
System.out.println("Sheet数据:" + value);
if(value.size()>0){
System.out.println("第二行数据为:" + value.get(1));
}
System.out.println("----------------------");
});
}
导出测试案例截图
public class ExportExcelDemo {
/****动态导出-基本使用以及导出图片****/
@GetMapping("/export")
public void export(HttpServletResponse response) throws Exception{
// 表头数据
List<Object> head = Arrays.asList("姓名","年龄","性别","头像");
// 用户1数据
List<Object> user1 = new ArrayList<>();
user1.add("诸葛亮");
user1.add(60);
user1.add("男");
/*这里用URL可以将网址中的图片直接下载到表格中,需要联网*/
user1.add(new URL("https://profile.csdnimg.cn/A/7/3/3_sunnyzyq"));
// 用户2数据
List<Object> user2 = new ArrayList<>();
user2.add("大乔");
user2.add(28);
user2.add("女");
user2.add(new URL("https://profile.csdnimg.cn/6/1/9/0_m0_48717371"));
// 将数据汇总
List<List<Object>> sheetDataList = new ArrayList<>();
sheetDataList.add(head);
sheetDataList.add(user1);
sheetDataList.add(user2);
// 导出数据
ExcelUtils.export(response,"用户表Demo", sheetDataList);
}
/****动态导出-实现下拉框、表头横向合并、纵向合并****/
@GetMapping("/export1")
public void export1(HttpServletResponse response) throws Exception{
// 表头数据 Constant.COLUMN_MERGE表示表头合并
List<Object> head = Arrays.asList("姓名","年龄","性别", ExcelUtilConstant.COLUMN_MERGE,"出生地", ExcelUtilConstant.COLUMN_MERGE);
// 用户1数据
List<Object> user1 = new ArrayList<>();
user1.add("诸葛亮");
user1.add(60);
user1.add("男");
user1.add("性");
user1.add("北京");
user1.add("小巷子路53号");
// 用户2数据
List<Object> user2 = new ArrayList<>();
user2.add("大乔");
user2.add(28);
user2.add("女");
user2.add("性");
user2.add("上海");
user2.add("福东大道231号");
// 用户3数据
List<Object> user3 = new ArrayList<>();
user3.add("小乔");
//对用户2/3年龄字段进行纵向合并
user3.add(ExcelUtilConstant.ROW_MERGE);
user3.add("女");
user3.add("性");
user3.add("上海");
user3.add("福东大道231号");
// 将数据汇总
List<List<Object>> sheetDataList = new ArrayList<>();
sheetDataList.add(head);
sheetDataList.add(user1);
sheetDataList.add(user2);
sheetDataList.add(user3);
//设置下拉列表(键为第几列(从0开始),值为下列数据)
Map<Integer,List<String>> selectMap = new HashMap<Integer,List<String>>();
selectMap.put(2, Arrays.asList("男","女"));
selectMap.put(3, Arrays.asList("北京","上海","广州"));
// 导出数据
ExcelUtils.export(response,"用户表Demo", sheetDataList,selectMap);
}
/****模板导出下载-基础版****/
@GetMapping("/export2")
public void export2(HttpServletResponse response) throws Exception{
ExcelUtils.exportTemplate(response,"用户表Demo", TeacherEntity.class);
}
/****模板导出下载-附带示例值****/
@GetMapping("/export3")
public void export3(HttpServletResponse response) throws Exception{
ExcelUtils.exportTemplate(response,"用户表Demo", TeacherEntity.class,true);
}
/****按对象导出-基础版以及按表头顺序导出(即自己选择哪一列在前)****/
@GetMapping("/export4")
public void export4(HttpServletResponse response)throws Exception{
//构造数据
List<TeacherEntity> list = new ArrayList<>();
//用户1
TeacherEntity t1 = new TeacherEntity();
t1.setTName("大桥");
t1.setTsex(1);
t1.setTage(22);
t1.setTel("15233256789");
t1.setTaddress("武汉市");
//用户2
TeacherEntity t2 = new TeacherEntity();
t2.setTName("小桥");
t2.setTsex(0);
t2.setTage(25);
t2.setTel("15789435789");
t2.setTaddress("福州县");
//将用户数据塞入list
list.add(t1);
list.add(t2);
//导出数据
ExcelUtils.export(response,"用户表Demo",list, TeacherEntity.class);
}
/****按对象多sheet页导出****/
@GetMapping("/export5")
public void export5(HttpServletResponse response)throws Exception{
// 第 1 个 Sheet 页
List<List<Object>> sheet1 = new ArrayList<>();
List<Object> sheet1Head = new ArrayList<>();
sheet1Head.add("姓名");
sheet1Head.add("数学");
sheet1Head.add("英语");
sheet1.add(sheet1Head);
List<Object> row1 = new ArrayList<>();
row1.add("Jack");
row1.add(85);
row1.add(100);
sheet1.add(row1);
List<Object> row2 = new ArrayList<>();
row2.add("Marry");
row2.add(85);
row2.add(100);
sheet1.add(row2);
// 第 2 个 Sheet 页
List<List<Object>> sheet2 = new ArrayList<>();
List<Object> sheet2Head = new ArrayList<>();
sheet2Head.add("姓名");
sheet2Head.add("音乐");
sheet2Head.add("美术");
sheet2.add(sheet2Head);
List<Object> row01 = new ArrayList<>();
row01.add("Jack");
row01.add(77);
row01.add(66);
sheet2.add(row01);
List<Object> row02 = new ArrayList<>();
row02.add("Marry");
row02.add(99);
row02.add(88);
sheet2.add(row02);
// 将两个 Sheet 页添加到集合中
Map<String, List<List<Object>>> sheets = new LinkedHashMap<>();
sheets.put("文化课", sheet1);
sheets.put("艺术课", sheet2);
// 导出数据
ExcelUtils.exportManySheet(response, "学生成绩表", sheets);
}
}
小结
内容比较多就不一一展示了,后续博主也会更新迭代此工具类,需要的源码的小伙伴三连留下邮箱即可,欢迎各位提出BUG。打包的结构如下,有源码、jar包以及文档,真正的开袋即食。