Java Time API - 获取总运行时间的更好方法

标签 java java-8 java-time

这是我第一次有机会使用 Java 8 中的"new"java.time 包。

我需要获取总耗时,例如:
1 天,2h:3m:4s 5ms

我知道有 2 个 TemporalAmount 间隔实现:
- Period 表示年、月和日
- 持续时间,表示小时、分钟、秒、毫秒和纳秒

有一种方法可以将这两者结合起来,或者比“做数学”更简单的方法吗?

这是迄今为止我能做的最好的事情: (更新了新的改进版本)

LocalDateTime start = LocalDateTime.now();
// Forcing a long time execution to measure
LocalDateTime end = start
        .plusDays(1)
        .plusHours(2)
        .plusMinutes(3)
        .plusSeconds(4)
        .plusNanos(5000);

LocalDateTime elapsed = end
        .minusDays(start.getDayOfYear())
        .minusHours(start.getHour())
        .minusMinutes(start.getMinute())
        .minusSeconds(start.getSecond())
        .minusNanos(start.getNano());

Period period = Period.between(start.toLocalDate(), end.toLocalDate());
long days = period.getDays();

long hours = elapsed.getHour();
long minutes = elapsed.getMinute();
long seconds = elapsed.getSecond();
long milliseconds = elapsed.getNano() / 1000;

StringBuilder msg = new StringBuilder();
msg.append(seconds);
msg.append("s ");
msg.append(milliseconds);
msg.append("ms");
if(minutes > 0) {
    msg.insert(0, "m:");
    msg.insert(0, minutes);
}
if(hours > 0) {
    msg.insert(0, "h:");
    msg.insert(0, hours);
}
if(days > 0) {
    msg.insert(0, days == 1 ? " day, " : " days, ");                
    msg.insert(0, days);
}

System.out.println(msg.toString());

感谢您的宝贵时间=)

最佳答案

似乎您需要来自 JodaTimePeriodFormatter。请参阅以下链接:

How to format a duration in java? (e.g format H:MM:SS)

Formatting a Duration in Java 8 / jsr310

鉴于这两个,我建议使用 JodaTime 作为 Duration

关于Java Time API - 获取总运行时间的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186390/

相关文章:

java - jQuery-Servlet的AJAX调用

java - 将 Java 字符串流转换为 float 组

java - 获取当前财政年度的开始日期

java - 在哪里可以找到 Java 中浏览器首选项的 ChromeDriver 常量?

java - 如何更改 Java servlet 中的请求属性以重定向页面?

java - 如何按属性对对象列表进行分组,然后使用(键,值)对迭代结果?

java - Instant Time解析错误(无法从TemporalAccessor获取Instant)

java - Kotlin Android/Java 字符串日期时间格式,API21

java - Dagger 2 在 Application 类中构建组件的良好实践

AspectJ 和 Java8 - 操作数堆栈上的错误类型