【问题标题】:Java Time API - A better way to get total elapsed timeJava Time API - 获取总运行时间的更好方法
【发布时间】:2014-09-30 22:09:57
【问题描述】:

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

我需要获取总运行时间,例如:
1 day, 2h:3m:4s 5ms

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

有没有一种方法可以将这两者结合起来,或者比“做数学”更直接?

到目前为止,这是我能做的最好的事情: (更新了新的改进版本)

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());

感谢您的宝贵时间 =)

【问题讨论】:

  • 我不明白为什么 elapsed 不会总是等于 1:1:3:4:5000? (D:H:M:S:ms)
  • 我曾经做过类似的事情,这里是:stackoverflow.com/questions/19636583/…
  • @libik 谢谢,你的代码很有帮助,我会收藏它。

标签: java java-8 java-time


【解决方案1】:

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

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

Formatting a Duration in Java 8 / jsr310

鉴于这两个,我建议将JodaTime 用于Duration

【讨论】:

  • 谢谢,我已经知道 JodaTime,但我不想在我的项目中再增加一个依赖项,而只在整个代码中执行一次。无论如何,第二个链接回答了我的问题:Java Time API 中没有 JodaTime 的 PeriodType 等效项。
猜你喜欢
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 2013-06-18
  • 2018-05-22
  • 1970-01-01
相关资源
最近更新 更多