diff --git a/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java b/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java index 121d52dda..cb3377766 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java @@ -382,20 +382,27 @@ public class StopWatch { sb.append("No task info kept"); } else { sb.append("---------------------------------------------").append(FileUtil.getLineSeparator()); - sb.append(DateUtil.getShotName(unit)).append(" % Task name").append(FileUtil.getLineSeparator()); + sb.append(DateUtil.getShotName(unit)).append(" % Task name").append(FileUtil.getLineSeparator()); sb.append("---------------------------------------------").append(FileUtil.getLineSeparator()); final NumberFormat nf = NumberFormat.getNumberInstance(); - nf.setMinimumIntegerDigits(9); nf.setGroupingUsed(false); final NumberFormat pf = NumberFormat.getPercentInstance(); - pf.setMinimumIntegerDigits(2); pf.setGroupingUsed(false); for (final TaskInfo task : getTaskInfo()) { - sb.append(nf.format(task.getTime(unit))).append(" "); - sb.append(pf.format((double) task.getTimeNanos() / getTotalTimeNanos())).append(" "); + final String taskTimeStr = nf.format(task.getTime(unit)); + sb.append(taskTimeStr); + if(taskTimeStr.length() < 11){ + sb.append(StrUtil.repeat(' ', 11 - taskTimeStr.length())); + } + + final String percentStr = pf.format((double) task.getTimeNanos() / getTotalTimeNanos()); + if(percentStr.length() < 4){ + sb.append(StrUtil.repeat(' ', 4 - percentStr.length())); + } + sb.append(percentStr).append(" "); sb.append(task.getTaskName()).append(FileUtil.getLineSeparator()); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/date/StopWatchTest.java b/hutool-core/src/test/java/cn/hutool/core/date/StopWatchTest.java new file mode 100644 index 000000000..93d945d1d --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/date/StopWatchTest.java @@ -0,0 +1,26 @@ +package cn.hutool.core.date; + +import cn.hutool.core.lang.Console; +import cn.hutool.core.thread.ThreadUtil; +import org.junit.Test; + +import java.util.concurrent.TimeUnit; + +public class StopWatchTest { + + /** + * https://gitee.com/dromara/hutool/issues/I6HSBG + */ + @Test + public void prettyPrintTest() { + final StopWatch stopWatch = new StopWatch(); + stopWatch.start("任务1"); + ThreadUtil.sleep(1); + stopWatch.stop(); + stopWatch.start("任务2"); + ThreadUtil.sleep(200); + stopWatch.stop(); + + Console.log(stopWatch.prettyPrint(TimeUnit.MILLISECONDS)); + } +}