Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java时间API—获取总运行时间的更好方法_Java_Java 8_Java Time - Fatal编程技术网

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

Java时间API—获取总运行时间的更好方法,java,java-8,java-time,Java,Java 8,Java Time,这是我第一次有机会使用Java8中的“新”java.time包 我需要得到总的运行时间,比如: 1天,2h:3m:4s5ms 我知道有2个TemporalAmount间隔实现: -期间年、月和日 -持续时间小时、分钟、秒、毫秒和纳秒 有一种方法可以将这两种或比“做数学”更简单的东西混合在一起? 这是迄今为止我所能做的最好的事情: (更新为新的改进版本) 感谢您的时间=)似乎您需要来自JodaTime的PeriodFormatter。请参阅以下链接: 鉴于这两种情况,我建议使用JodaTime

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

我需要得到总的运行时间,比如:
1天,2h:3m:4s5ms

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

有一种方法可以将这两种或比“做数学”更简单的东西混合在一起?

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


感谢您的时间=)

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


鉴于这两种情况,我建议使用
JodaTime
作为
Duration

我不明白为什么经过的时间不总是等于1:1:3:4:5000?(D:H:M:S:ms)我做过一次类似的事情,这里是:@libik谢谢,你的代码非常有用,我会把它添加到书签中。谢谢,我已经知道JodaTime,但我不想在我的项目中再增加一个依赖项,在整个代码中只做一次。无论如何,第二个链接回答了我的问题:在Java时间API中没有JodaTime的
PeriodType
等价物。
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());