早期只是使用Demo案例,并不具有丰富的样例Demo,本次替换为丰富的时间单位案例。

Hutool常规方法

        final TimeInterval timer = DateUtil.timer();

        long oneTime = timer.interval(); // 毫秒数,不会重置计时

        long getTimeAndReCountTime = timer.intervalRestart(); // 返回毫秒数,并重置开始时间

        long mintues = timer.intervalMinute(); // 分钟数,不会重置计时

案例代码

Hutool 计时工具使用案例

        final TimeInterval timer = DateUtil.timer();

        // todo XXXXXXXXXX
        
        long endTime = timer.intervalRestart(); // 获取执行的毫秒,并重置计时
        System.out.println("XXX耗时(单位毫秒):" + endTime);
        System.out.println("XXX耗时(单位秒):" + BigDecimal.valueOf(endTime / 1000.00D).setScale(2, BigDecimal.ROUND_HALF_UP));
        System.out.println("XXX耗时(单位分钟):" + BigDecimal.valueOf(endTime / 60 / 1000.00D).setScale(2, BigDecimal.ROUND_HALF_UP));

GPT4给优化了一下(如果只是临时使用,推荐上文的暴力一点。)

import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.date.DateUtil;
import java.math.BigDecimal;
import java.math.RoundingMode;

public class TimePrinter {

    private static final int SCALE = 2; // 小数点后保留位数
    private static final BigDecimal THOUSAND = BigDecimal.valueOf(1000);
    private static final BigDecimal SIXTY = BigDecimal.valueOf(60);

    public static void main(String[] args) {
        TimeInterval timer = DateUtil.timer();
        // todo XXXXXXXXXX
        long elapsedMilliseconds = timer.intervalRestart(); // 获取执行的毫秒,并重置计时
        printElapsedTime(elapsedMilliseconds);
    }

    private static void printElapsedTime(long elapsedMilliseconds) {
        System.out.println("XXX耗时(单位毫秒):" + elapsedMilliseconds);
        System.out.println("XXX耗时(单位秒):" + formatTime(BigDecimal.valueOf(elapsedMilliseconds), THOUSAND));
        System.out.println("XXX耗时(单位分钟):" + formatTime(BigDecimal.valueOf(elapsedMilliseconds), THOUSAND.multiply(SIXTY)));
    }

    private static String formatTime(BigDecimal elapsedMilliseconds, BigDecimal unit) {
        return elapsedMilliseconds.divide(unit, SCALE, RoundingMode.HALF_UP).toString();
    }
}

非Hutool的常规代码

    @Test
    public void HelloSystemTimes() {
        String test = "";
        // 创建计时器
        long startTime = System.currentTimeMillis();

        for (int i = 0; i < 1000; i++) {
            test = test + i;
        }
        long endTimeOne = System.currentTimeMillis();
        System.out.println("A耗时" + (endTimeOne - startTime));   // A耗时:3

        for (int i = 0; i < 10000; i++) {
            test = test + i;
        }
        long endTimeTwo = System.currentTimeMillis();
        System.out.println("B耗时:" + (endTimeTwo - endTimeOne));  // B耗时:489
    }

高级玩法 - 分组

    public static void main(String[] args) {
        final TimeInterval timer = new TimeInterval();
        // 分组A
        timer.start("A");
        ThreadUtil.sleep(1000);
        // 分组B
        timer.start("B");
        ThreadUtil.sleep(1000);
        Console.log("Timer 1 took {} ms", timer.intervalMs("A"));
        Console.log("Timer 2 took {} ms", timer.intervalMs("B"));
    }

输出

Timer 1 took 2015 ms
Timer 2 took 1033 ms

ps:这个时间多出来的15毫秒,可能是线程获取的CPU时间片导致的。分组方法不会额外耗时!

特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤