Java Time API - 获得总耗用时间的更好方法

时间:2014-08-07 15:27:40

标签: java java-8 java-time

这是我第一次使用Java 8中的“new”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());

感谢您的时间=)

1 个答案:

答案 0 :(得分:3)

好像你需要来自PeriodFormatter的{​​{1}}。见以下链接:

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

Formatting a Duration in Java 8 / jsr310

鉴于这两项,我建议JodaTime使用JodaTime