Java实现时间戳转代码运行时长

 更新时间:2025年06月22日 09:40:15   作者:晨曦之光Wing  
这篇文章主要为大家详细介绍了如何使用Java实现时间戳转代码运行时长功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

一、方法

1、代码

public static String convert(long timestamp) {
    if (timestamp <= 0) {
        return "0s";
    }
 
    long oneSecond = 1000;
    long oneMinute = 60 * oneSecond;
    long oneHour = 60 * oneMinute;
    long oneDay = 24 * oneHour;
 
    int d = 0;
    int h = 0;
    int m = 0;
    int s = 0;
 
    String result = "";
    if (timestamp >= oneDay) {
        d = (int) (timestamp / oneDay);
        result += d + "d";
    }
    timestamp -= d * oneDay;
 
    if (timestamp >= oneHour) {
        h = (int) (timestamp / oneHour);
        result += h + "h";
    }
    timestamp -= h * oneHour;
 
    if (timestamp >= oneMinute) {
        m = (int) (timestamp / oneMinute);
        result += m + "m";
    }
    timestamp -= m * oneMinute;
 
    if (timestamp >= oneSecond) {
        s = (int) (timestamp / oneSecond);
        result += s + "s";
    }
    timestamp -= s * oneSecond;
 
    if (timestamp > 0) {
        result += timestamp + "ms";
    }
 
    return result;
}

2、使用示例

public static void main(String[] args) throws InterruptedException {
    long startTime = System.currentTimeMillis();
    
    // 模拟业务代码运行时间
    Thread.sleep(500);
 
    long endTime = System.currentTimeMillis();
    System.out.println(convert(endTime - startTime));
}
public static void main(String[] args) throws InterruptedException {
    long startTime = System.currentTimeMillis();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    System.out.println("[开始时间] " + sdf.format(startTime));
 
    // 模拟业务代码运行时间
    Thread.sleep(500);
 
    long endTime = System.currentTimeMillis();
    System.out.println("[结束时间] " + sdf.format(endTime));
    System.out.println("[运行时间] " + convert(endTime - startTime));
}

二、工具类

如果需要在多处使用,并且开始时间和结束时间都要打印,会有点繁琐。为了便捷使用,设置了一个工具类。

1、代码

 
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
 
/**
 * Print time-consuming(eg: 1h23m20s50ms). <br/>
 * -step1: addStartTime() <br/>
 * -step2: addEndTime() <br/>
 * -step3: print() <br/>
 * Steps 1 to 3 are a set of operations that can be looped. Calling addStartTime() and addEndTime()
 * will print the current time in the format of "yyyy-MM-dd HH:mm:ss.S". The method addStartTime()
 * and addEndTime() must match each other, otherwise output NULL.
 */
public class TimeConsume {
    private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    private final List<Long> startTime;
    private final List<Long> endTime;
    private int point;
 
    public TimeConsume() {
        this.startTime = new ArrayList<>();
        this.endTime = new ArrayList<>();
        this.point = 0;
    }
 
    /***
     * Print current time(simple date format is "yyyy-MM-dd HH:mm:ss.S") and add current time to
     * startTime.
     */
    public void addStartTime() {
        long currentTimeMillis = System.currentTimeMillis();
        System.out.println("[start time] " + sdf.format(currentTimeMillis));
        this.startTime.add(currentTimeMillis);
    }
 
    /***
     * Print current time(simple date format is "yyyy-MM-dd HH:mm:ss.S") and add current time to
     * endTime.
     */
    public void addEndTime() {
        long currentTimeMillis = System.currentTimeMillis();
        System.out.println("[end time] " + sdf.format(currentTimeMillis));
        this.endTime.add(currentTimeMillis);
    }
 
    /***
     * Print time-consuming(eg: 1h23m20s50ms). If the start time and end time do not match each
     * other, output empty. This method can be reused.
     */
    public void print() {
        try {
            System.out.println("[time-consuming] "
                    + convert(this.endTime.get(point) - this.startTime.get(point)));
        } catch (Exception e) {
            System.out.println("[time-consuming] NULL");
        }
        this.point++;
    }
 
    /***
     * timestamp convert to time-consuming
     * 
     * @param timestamp long timestamp
     * @return time-consuming string, eg: 1d, 12h32m45s123ms, 1h23m20s50ms, 5min2s, 10s, 520ms
     */
    public String convert(long timestamp) {
        if (timestamp <= 0) {
            return "0s";
        }
 
        long oneSecond = 1000;
        long oneMinute = 60 * oneSecond;
        long oneHour = 60 * oneMinute;
        long oneDay = 24 * oneHour;
 
        int d = 0;
        int h = 0;
        int m = 0;
        int s = 0;
 
        String result = "";
        if (timestamp >= oneDay) {
            d = (int) (timestamp / oneDay);
            result += d + "d";
        }
        timestamp -= d * oneDay;
 
        if (timestamp >= oneHour) {
            h = (int) (timestamp / oneHour);
            result += h + "h";
        }
        timestamp -= h * oneHour;
 
        if (timestamp >= oneMinute) {
            m = (int) (timestamp / oneMinute);
            result += m + "m";
        }
        timestamp -= m * oneMinute;
 
        if (timestamp >= oneSecond) {
            s = (int) (timestamp / oneSecond);
            result += s + "s";
        }
        timestamp -= s * oneSecond;
 
        if (timestamp > 0) {
            result += timestamp + "ms";
        }
 
        return result;
    }
}

2、使用示例

public static void main(String[] args) throws InterruptedException {
    TimeConsume tc = new TimeConsume();
    tc.addStartTime();
 
    // 模拟业务代码运行时间
    Thread.sleep(500);
 
    tc.addEndTime();
    tc.print();
 
    // 可多次调用
    tc.addStartTime();
    // 模拟业务代码运行时间
    Thread.sleep(50);
    tc.addEndTime();
    tc.print();
}

到此这篇关于Java实现时间戳转代码运行时长的文章就介绍到这了,更多相关Java时间戳转代码运行时长内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JSONObject按put顺序排放与输出方式

    JSONObject按put顺序排放与输出方式

    这篇文章主要介绍了JSONObject按put顺序排放与输出方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • javaweb学习总结——使用JDBC处理MySQL大数据

    javaweb学习总结——使用JDBC处理MySQL大数据

    本篇文章主要介绍了JDBC处理MySQL大数据,有时是需要用程序把大文本或二进制数据直接保存到数据库中进行储存的,非常具有实用价值,需要的朋友可以参考下。
    2016-11-11
  • 理解maven命令package、install、deploy的联系与区别

    理解maven命令package、install、deploy的联系与区别

    这篇文章主要介绍了理解maven命令package、install、deploy的联系与区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • springboot将lib和jar分离的操作方法

    springboot将lib和jar分离的操作方法

    本文介绍了如何通过优化pom.xml配置来减小Spring Boot项目的jar包大小,主要通过使用spring-boot-maven-plugin和maven-dependency-plugin插件,将依赖库打包到jar中,并通过指定外部lib路径的方式运行jar,从而减小jar包体积,感兴趣的朋友一起看看吧
    2025-02-02
  • Java 异步编程实践_动力节点Java学院整理

    Java 异步编程实践_动力节点Java学院整理

    异步编程提供了一个非阻塞的,事件驱动的编程模型。下面通过本文给大家介绍Java 异步编程实践,感兴趣的的朋友一起看看吧
    2017-05-05
  • Java内存泄漏问题处理方法经验总结

    Java内存泄漏问题处理方法经验总结

    今天小编就为大家分享一篇关于Java内存泄漏问题处理方法经验总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • SpringBoot获取application.properties文件中文乱码问题及解决

    SpringBoot获取application.properties文件中文乱码问题及解决

    这篇文章主要介绍了SpringBoot获取application.properties文件中文乱码问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • JDBC获取数据库连接由浅入深

    JDBC获取数据库连接由浅入深

    大家好,本篇文章主要讲的是JDBC获取数据库连接由浅入深,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • spring profile 多环境配置管理详解

    spring profile 多环境配置管理详解

    这篇文章主要介绍了 spring profile 多环境配置管理详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • Java使用itextpdf实现PDF转文本以及转图片

    Java使用itextpdf实现PDF转文本以及转图片

    PDF转文本的插件常用的有pdfbox ,itextpdf 和 spire.pdf,本文主要介绍如何使用itextpdf实现PDF转文本以及转图片,需要的可以参考一下
    2025-01-01

最新评论