这是我第一次有机会使用 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());
感谢您的宝贵时间=)
最佳答案
似乎您需要来自 JodaTime
的 PeriodFormatter
。请参阅以下链接:
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/