Java Time API - 获得总耗用时间的更好方法 [英] Java Time API - A better way to get total elapsed time

查看:203
本文介绍了Java Time API - 获得总耗用时间的更好方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我第一次使用Java 8中的newjava.time包。

This is my first oportunity to play with the "new" java.time package from Java 8.

我需要获得总耗用时间,例如:

1天,2小时:3米:4秒5毫米

I need to get the total elapsed time, something like:
1 day, 2h:3m:4s 5ms

我知道有2个 TemporalAmount 间隔的实施:

- 期间年,月和日
- 持续时间小时,分钟,秒,毫秒和纳秒

I know that have 2 TemporalAmount implementations for intervals:
- Period for years, months and days
- Duration for hours, minutes, seconds, milliseconds and nanoseconds

有一个混合这两个或者比做数学更直接的东西?

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

That was the best I could do until now: (Updated with a new improved version)

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 。见以下链接:

Seems like you need the PeriodFormatter from JodaTime. See below links:

如何格式化java中的持续时间? (例如格式H:MM:SS)

用Java 8 / jsr310格式化持续时间

考虑到这两个,我建议使用 JodaTime for Duration

Given these two, I suggest using JodaTime for Duration.

这篇关于Java Time API - 获得总耗用时间的更好方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆