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

时间差中文展示工具

作者: 老柿子 | 来源:发表于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;
    }
}

相关文章

  • 时间差中文展示工具

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

  • 多个cell中展示倒计时,本地和服务器时间差异解决方案

    多个cell中展示倒计时,本地和服务器时间差异解决方案

  • QT设置中文语言及黑色主题

    设置中文菜单,工具-------- 选项------- 环境 ---------语言 ---------中文(中国...

  • 商业智能BI和报表的区别?

    报表是数据展示工具,商业智能BI是数据分析工具。 报表工具是一类报表制作工具和数据展示工具,用于制作各类数据报表、...

  • Python3 生成中文词云

    前提 Python 生成中文词云主要用到两个依赖库: jieba:中文分词工具 wordcloud:词云生成工具 ...

  • 中文NLP工具

    中文NLP工具 1 HanLP HanLP(汉语言处理包)是一款开源的使用Java进行开发的中文自然语言处理工具,...

  • iOS工具类-时间差获取

    最近想写点日常使用的工具类,方便开发。首先想到就是时间之类的问题,所以打开Xocde,进行代码编辑。这个代码考虑不...

  • Java中文按照拼音排序(含中文)

    添加maven,中文转拼音 工具jar 中文转拼音 排序封装类 使用

  • 【Axure10】菜单-视图

    工具栏 主工具栏 主工具栏是否展示,默认展示。 自定义工具栏 自定义主工具栏功能组件。 注:可以结合快捷键与常用功...

  • 展示信息的工具

    今天是入职Oray的第一天,终于自己开始走上了产品这一条路了,并且能够有所实践,把以前看到的很多散点的信息和自己固...

网友评论

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

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