Java工具类集合(包括日期工具类、字符串工具类、Excel导入导出工具类、对象复制工具类以及方法文档和完整测试案例等等.....)

前言

工作也有两年多得时间了,发现不管哪个项目组都有其自己的一些小工具类,这些开袋即食的工具让我们的工作效率得到了提升,所以博主就利用空闲时间整理了一份工具类集合,其中包括了常用的日期工具类、字符串处理的工具类、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包以及文档,真正的开袋即食。在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值