美文网首页框架介绍
时间差中文展示工具

时间差中文展示工具

作者: 老柿子 | 来源:发表于2020-05-28 20:25 被阅读0次

    经常会遇到在日志中显示时间范围,但是时间范围都是一堆毫秒单位的,自己心算下,这里简单做一个工具在打日志的时候,就将范围作为中文展示

    示例:

    def "测试1"() {
        expect:
        Assert.assertEquals(result, TimeStrUtil.parseTime(time))
    
        where:
        time                                                   || result
        TimeUnit.MILLISECONDS.toMillis(1)                      || "1毫秒"
        TimeUnit.MILLISECONDS.toMillis(2)                      || "2毫秒"
        TimeUnit.MILLISECONDS.toMillis(3)                      || "3毫秒"
        TimeUnit.MILLISECONDS.toMillis(7)                      || "7毫秒"
        TimeUnit.SECONDS.toMillis(7)                           || "7秒 "
        TimeUnit.HOURS.toMillis(7)                             || "7小时 "
        TimeUnit.DAYS.toMillis(7) + TimeUnit.HOURS.toMillis(2) || "7天 2小时 "
    }
    
    def "测试4"() {
        expect:
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Date date1 = format.parse("2010-12-20 12:02:12.321")
        Date date2 = format.parse("2010-12-30 10:00:10.301")
    
        // 9天 21小时 57分钟 57秒 980毫秒
        println TimeRangeStrUtil.parseDuration(date1, date2)
        // 1周 2天 21小时 57分钟 57秒 980毫秒
        println TimeStrUtil.parseDurationWeek(date1, date2)
    }
    

    工具源码

    目前该工具已经作为框架Neo中的一个工具类了,也算推荐下自己的这个框架吧<br />github:https://github.com/SimonAlong/Neo

    import java.util.Date;
    import lombok.experimental.UtilityClass;
    
    /**
     * 主要用于计算两个时间之间的差值,毫秒,秒,分钟,小时,天,周之间的转换,主要是字符的展示
     *
     * @author zhouzhenyong
     * @since 2019/2/27 下午4:12
     */
    @UtilityClass
    public class TimeRangeStrUtil {
    
        /**
         * 我们这里最小的单位是毫秒
         */
        private static final long MILLIS = 1;
        /**
         * 秒
         */
        private static final long SECOND = 1000 * MILLIS;
        /**
         * 分钟
         */
        private static final long MINUTE = 60 * SECOND;
        /**
         * 小时
         */
        private static final long HOUR = 60 * MINUTE;
        /**
         * 天
         */
        private static final long DAY = 24 * HOUR;
        /**
         * 周
         */
        private static final long WEEK = 7 * DAY;
    
        /**
         * 计算两个时间的差值,用字符表示
         * <p>
         * @param date1 日期1
         * @param date2 日期2
         * @return 返回两个值的差值的字符展示:举例:4天 1分钟 12秒 132毫秒
         */
        public String parseDuration(Date date1, Date date2) {
            if (date1.getTime() > date2.getTime()) {
                return parseTime(date1.getTime() - date2.getTime());
            } else {
                return parseTime(date2.getTime() - date1.getTime());
            }
        }
    
        /**
         * 计算两个时间的差值,用字符表示
         * <p>
         * @param date1 日期1
         * @param date2 日期2
         * @return 返回两个值的差值的字符展示:举例:1周 1分钟 12秒 132毫秒
         */
        public String parseDurationWeek(Date date1, Date date2) {
            if (date1.getTime() > date2.getTime()) {
                return parseWeeks(date1.getTime() - date2.getTime());
            } else {
                return parseWeeks(date2.getTime() - date1.getTime());
            }
        }
    
        /**
         * 解析时间,根据传入的参数自动返回对应的字符:毫秒,秒,分钟,小时,天:其中这里默认按照天来计算
         * <p>
         * @param time 时间
         * @return 返回时间的字符展示:举例:2天 1分钟 12秒
         */
        public String parseTime(long time) {
            return parseDays(time);
        }
    
        /**
         * 周:按周来显示
         * <p>
         * @param time 时间
         * @return 返回按周解析后的字符,比如:1周 1分钟 12秒 132毫秒
         */
        public String parseWeeks(long time) {
            StringBuilder sb = new StringBuilder();
            if (canWeek(time)) {
                sb.append(time / WEEK).append("周 ").append(parseDays(time % WEEK));
            } else {
                sb.append(parseDays(time % WEEK));
            }
            return sb.toString();
        }
    
        /**
         * 按天解析
         * <p>
         * @param time 时间
         * @return 按照解析后的时间字符
         */
        private String parseDays(long time) {
            StringBuilder sb = new StringBuilder();
            if (canDay(time)) {
                sb.append(time / DAY).append("天 ").append(parseHours(time % DAY));
            } else {
                sb.append(parseHours(time % DAY));
            }
            return sb.toString();
        }
    
        /**
         * 按照小时解析
         * <p>
         * @param time 时间
         * @return 时间类型的字符
         */
        private String parseHours(long time) {
            StringBuilder sb = new StringBuilder();
            if (canHour(time)) {
                sb.append(time / HOUR).append("小时 ").append(parseMinutes(time % HOUR));
            } else {
                sb.append(parseMinutes(time % HOUR));
            }
            return sb.toString();
        }
    
        /**
         * 按照分钟解析时间
         * <p>
         * @param time 时间
         * @return 按照分钟解析返回的字符
         */
        private String parseMinutes(long time) {
            StringBuilder sb = new StringBuilder();
            if (canMinute(time)) {
                sb.append(time / MINUTE).append("分钟 ").append(parseSeconds(time % MINUTE));
            } else {
                sb.append(parseSeconds(time % MINUTE));
            }
            return sb.toString();
        }
    
        /**
         * 按照秒解析时间
         * <p>
         * @param time 时间
         * @return 按照秒解析时间返回的字符
         */
        private String parseSeconds(long time) {
            StringBuilder sb = new StringBuilder();
            if (canSecond(time)) {
                sb.append(time / SECOND).append("秒 ").append(parseMillis(time % SECOND));
            } else {
                sb.append(parseMillis(time % SECOND));
            }
            return sb.toString();
        }
    
        /**
         * 按照毫秒解析时间
         * <p>
         * @param time 时间
         * @return 按照毫秒解析时间返回的字符
         */
        private String parseMillis(long time) {
            StringBuilder sb = new StringBuilder();
            if (canMillis(time)) {
                sb.append(time).append("毫秒");
            }
            return sb.toString();
        }
    
        private boolean canWeek(long time) {
            return time > WEEK;
        }
    
        private boolean canDay(long time) {
            return time > DAY;
        }
    
        private boolean canHour(long time) {
            return time > HOUR;
        }
    
        private boolean canMinute(long time) {
            return time > MINUTE;
        }
    
        private boolean canSecond(long time) {
            return time > SECOND;
        }
    
        private boolean canMillis(long time) {
            return time >= 0;
        }
    }
    

    相关文章

      网友评论

        本文标题:时间差中文展示工具

        本文链接:https://www.haomeiwen.com/subject/sjkzahtx.html