Java自定义时间工具类---求两个时间相差的时长(耗时),结果格式为xx年xx月xx日xx时xx分xx秒 【一看就懂】

        今天在做一个项目时,遇到了 如图所示 的时间格式需求,想了很久、也尝试了很多前后端代码的处理方式,思前想后决定写个工具类方便大家以后使用。

话不多说,直接上工具类代码

//  计算两个Date类型时间相差的时长,返回字符串格式-->例如:( 2年6月23日23时26分18秒 )如要修改格式修改源码即可
    public static String getTimeDiffString(Date d1, Date d2) throws ParseException {
        //  分别获取传入的两个时间的毫秒值
        long time1 = d1.getTime();
        long time2 = d2.getTime();
        //  计算两个时间所差的秒值,这里使用系统封装的Math类abs()绝对值方法做处理,这样就可以忽略传参时间的大小顺序,从而一定能得出一个正确的差值
        long diff = Math.abs((time1 - time2) / 1000);//    除以1000求出的是相差的秒值,秒*1000=毫秒
        //  这里提前把换算 年、月、日 等表达式写好,下面方便运算处理
        /*  注:这里就不做闰年平年、30天31天处理了,后续有时间可能会补上  */
        long year = 60 * 60 * 24 * 365;   //   年和秒之间的换算表达式
        long month = 60 * 60 * 24 * 30;   //   月和秒之间的换算表达式
        long day = 60 * 60 * 24;          //   日和秒之间的换算表达式
        long hour = 60 * 60;              //   小时和秒之间的换算表达式
        long minute = 60;                 //   分钟和秒之间的换算表达式
        //  用上面求出的时间差diff(秒)进行运算
        long yearDiff = diff / year;   //  yearDiff求出的值即为相差的年份
        long restYear = diff % year;   //  差值 % 年 取余 求restYear求出的值即为多出来的不到一年的秒值
        //  用多出来不到一年的值来继续进行运算
        long monthDiff = restYear / month;  //  monthDiff求出的值即为相差的月份
        long restMonth = restYear % month;  //  restMonth=多出来不到一个月的秒值
        //  用多出来不到一个月的值来继续进行运算
        long dayDiff = restMonth / day;     //  dayDiff求出的值即为相差的天数
        long restDay = restMonth % day;     //  restDay=多出来不到一天的秒值
        //  用多出来不到一天的值来进行运算
        long hourDiff = restDay / hour;     //  hourDiff求出的值即为相差的小时数
        long restHour = restDay % hour;     //  restHour=多出来不到一个小时的秒值
        //  用多出来不到一个小时的值来进行运算
        long minuteDiff = restHour / minute;    //  minuteDiff求出的值即为相差的天数
        long restMinute = restHour % minute;    //  restMinute=多出来不到一天的秒值
        //  最后进行字符串拼接
        String str = yearDiff + "年" + monthDiff + "月" + dayDiff + "日" + hourDiff + "时" + minuteDiff + "分" + restMinute + "秒";
        //  可根据业务需求修改字符串打印的值
        return str;     //  大功告成
    }

 这里就偷个小懒,不进行平年闰年、30天、31天等情况的判断啦,后续有时间可能会补上,嘻嘻~

安排测试代码及效果

 上图中箭头所示的工具类代码附在文末,非常简单,下面看上图中未注释的两个时间的测试效果

细心的朋友可以看到天数的不精确,原因是平年闰年,30天、31天所致,嘻嘻~ 

接下来看测试代码中注释的两个时间的测试效果

 没毛病哈铁子!!

最后附上上图所用到的工具类代码(将srting类型字符串转化为date)

 //  将srting类型字符串转化为date
    public static Date getDateFromString(String str, String pattern) throws ParseException {
        //  这里的传参就不做异常判断了
        //  pattern为自定义转换规则
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        //  调用SimpleDateFormat类的parse方法进行格式转换
        return sdf.parse(str);
    }

补:由于担心有朋友不知道在哪里使用该工具类,这里特地补充,如下图箭头处所示

 最终效果如图所示:

如有错误,欢迎指正

Thanks

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hah杨大仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值