JAVA获取时间差转成字符串的方法


前言

今天在项目中需要计算两个时间段的时间差,前端需要"XX天XX时XX分"格式的数据,发现"hutool"工具包下,有非常好用的工具类,所以写一篇文档记录一下


一、引用工具类

引用hutool工具包依赖
下面展示一些 内联代码片

<dependency>
		   <groupId>cn.hutool</groupId>
		   <artifactId>hutool-all</artifactId>
</dependency>

二、使用解析

1. DateUtil.formatBetween

在这里插入图片描述
可以传两个Date会自动计算毫秒值的差,下面是计算毫秒值的源代码,unit.getMillis()默认是1L
在这里插入图片描述
参数Level是BetweenFormatter类中的一个内部枚举
在这里插入图片描述
下方为实际将时间差毫秒值,转为字符串的方法

public String format() {
        StringBuilder sb = new StringBuilder();
        if (this.betweenMs > 0L) {
        	//计算天时分秒毫秒
            long day = this.betweenMs / DateUnit.DAY.getMillis();
            long hour = this.betweenMs / DateUnit.HOUR.getMillis() - day * 24L;
            long minute = this.betweenMs / DateUnit.MINUTE.getMillis() - day * 24L * 60L - hour * 60L;
            long BetweenOfSecond = ((day * 24L + hour) * 60L + minute) * 60L;
            long second = this.betweenMs / DateUnit.SECOND.getMillis() - BetweenOfSecond;
            long millisecond = this.betweenMs - (BetweenOfSecond + second) * 1000L;
            //获取传入Level的枚举下标,从0开始
            int level = this.level.ordinal();
            int levelCount = 0;
            //如果是调用的formatBetween方法,则this.isLevelCountValid(levelCount)一定为true,相关解析我就先不写了,需要的评论,看到了我会回复  
            //0L != day 只能是整除才会是1以上的整数 是0的话不拼接字符串
            //level >= BetweenFormatter.Level.DAY.ordinal() 遵从最左匹配原则,比如我传的是 BetweenFormatter.Level.MINUTE 是只显示到分
            if (this.isLevelCountValid(levelCount) && 0L != day && level >= BetweenFormatter.Level.DAY.ordinal()) {
                sb.append(day).append(BetweenFormatter.Level.DAY.name);
                ++levelCount;
            }

            if (this.isLevelCountValid(levelCount) && 0L != hour && level >= BetweenFormatter.Level.HOUR.ordinal()) {
                sb.append(hour).append(BetweenFormatter.Level.HOUR.name);
                ++levelCount;
            }

            if (this.isLevelCountValid(levelCount) && 0L != minute && level >= BetweenFormatter.Level.MINUTE.ordinal()) {
                sb.append(minute).append(BetweenFormatter.Level.MINUTE.name);
                ++levelCount;
            }

            if (this.isLevelCountValid(levelCount) && 0L != second && level >= BetweenFormatter.Level.SECOND.ordinal()) {
                sb.append(second).append(BetweenFormatter.Level.SECOND.name);
                ++levelCount;
            }

            if (this.isLevelCountValid(levelCount) && 0L != millisecond && level >= BetweenFormatter.Level.MILLISECOND.ordinal()) {
                sb.append(millisecond).append(BetweenFormatter.Level.MILLISECOND.name);
            }
        }
		
        if (StrUtil.isEmpty(sb)) {
            sb.append(0).append(this.level.name);
        }

        return sb.toString();
    }

总结

本文简单介绍了hutool工具包下的DateUtil.formatBetween使用,hutool提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值