当前位置: 首页 > 知识库问答 >
问题:

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

习华灿
2023-03-14

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

我需要得到总的运行时间,比如:< br> 1天,2h:3m:4s 5ms

我知道有2个时间间隔的实现
- ,月和日的
周期 - 小时,分钟,秒,毫秒和纳秒的持续时间

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

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

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个答案

谈琦
2023-03-14

似乎您需要JodaTime中的周期格式。请参阅以下链接:

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

在Java8/jsr310中格式化持续时间

考虑到这两种情况,我建议对持续时间使用JodaTime

 类似资料:
  • 问题内容: 我需要在预定义的时间长度内运行一些代码,当时间到时它需要停止。当前,我正在使用TimerTask来允许代码执行一段设定的时间,但这导致代码创建无尽的线程,并且效率很低。有更好的选择吗? 当前代码; 问题答案: 如果您使用的是Java5或更高版本,请考虑和。使用前者,您可以安排任务在指定的延迟后或以指定的时间间隔运行,因此,它可以更可靠地接管的角色。 该设施管理延迟(“每100毫秒运行一

  • 本文向大家介绍VC++ 获取系统时间的方法汇总,包括了VC++ 获取系统时间的方法汇总的使用技巧和注意事项,需要的朋友参考一下 1.使用CTime类(获取系统当前时间,精确到秒) a,从CTimet中提取年月日时分秒 b,计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下: c,获得当前日期和时间,并可以转化为CString 2.使用GetLocalTime:Windows API

  • 本文向大家介绍JS获取时间的方法,包括了JS获取时间的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS获取时间的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 问题内容: 在Java VisualVM中,有什么方法可以显示方法的总时间,而不是“自身时间”?(后者并不是特别有用,因为它并不能告诉您方法实际需要花费多少时间。) 如果不是,是否有任何独立的免费Java探查器可以计算方法总时间? 问题答案: 在“快照”视图中查看跟踪数据,使您可以查看总计和自身时间。 按下结果表中出现的“快照”按钮。这将创建一个新的选项卡,其中包含一个“调用树”视图,该视图可细分

  • 问题内容: 我想获取UTC时区的时间。所以我写了代码: 问题是输出显示了我的PST时间(我的本地时区)。我需要它来输出UTC时间,以便将其存储在数据库中。 问题答案:

  • 我想要得到UTC时区的时间。所以我写了代码: 问题是输出显示了PST(我的本地时区)中的时间。我需要它以UTC的形式输出时间,这样我就可以把它存储在我的数据库中。