Java如何计算程序运行时长并将时间差转换为字符串输出
Java 计算LocalDateTime时间差并转字符串的实现方法
你可以通过Java 8引入的时间相关工具类实现差值计算,以下是两种常用的实现方案:
方案1:使用Duration类获取格式化的时长字符串
java.time.Duration是专门用于计算两个时间点间隔的工具类,可以很方便的拆成天、时、分、秒、毫秒等不同单位的数值,拼接成你需要的字符串格式:
import java.time.Duration; import java.time.LocalDateTime; // 你的原有代码 LocalDateTime start = LocalDateTime.now(); // 你的业务代码执行 LocalDateTime end = LocalDateTime.now(); // 计算时间差,注意start要放在前面,否则会得到负的时长 Duration duration = Duration.between(start, end); // Java 9及以上版本可以直接用自带的part方法拆分 long days = duration.toDays(); long hours = duration.toHoursPart(); long minutes = duration.toMinutesPart(); long seconds = duration.toSecondsPart(); long millis = duration.toMillisPart(); String runTime = String.format("程序运行时长:%d天%d时%d分%d秒%d毫秒", days, hours, minutes, seconds, millis); // 直接打印输出即可 System.out.println(runTime);
如果使用的是Java 8版本,没有上述part系列方法,可以手动计算各单位的剩余值:
// Java 8兼容写法 long totalMillis = duration.toMillis(); long days = totalMillis / (1000 * 60 * 60 * 24); long hours = (totalMillis / (1000 * 60 * 60)) % 24; long minutes = (totalMillis / (1000 * 60)) % 60; long seconds = (totalMillis / 1000) % 60; long millis = totalMillis % 1000; String runTime = String.format("程序运行时长:%d天%d时%d分%d秒%d毫秒", days, hours, minutes, seconds, millis);
方案2:使用ChronoUnit获取指定单位的总时长
如果你只需要单一单位的总时长(比如总运行毫秒数、总运行秒数),可以用java.time.temporal.ChronoUnit实现:
import java.time.temporal.ChronoUnit; import java.time.LocalDateTime; LocalDateTime start = LocalDateTime.now(); // 业务代码执行 LocalDateTime end = LocalDateTime.now(); // 示例:获取总运行毫秒数 long totalMillis = ChronoUnit.MILLIS.between(start, end); String runTime = "程序总运行毫秒数:" + totalMillis; System.out.println(runTime); // 要获取其他单位把MILLIS替换即可,比如SECONDS(秒)、MINUTES(分钟)、HOURS(小时)
补充说明
- 如果你的作业没有强制要求用
LocalDateTime,统计短代码段运行时间更推荐用System.nanoTime(),精度更高,也不会受系统时间修改的影响 - 计算差值时一定要把开始时间作为第一个参数传入
between方法,否则会得到负数结果
内容的提问来源于stack exchange,提问作者Douglas Silveira
相关产品推荐
相关产品推荐

