如何将时间间隔转换为秒数?

3
    LocalDateTime start = LocalDateTime.of(2018, 9, 2, 14, 17, 25, 135);
    LocalDateTime end = LocalDateTime.of(2018, 9, 2, 14, 19, 59, 965);
    Duration duration = Duration.between(start, end);

我需要以以下格式获取结果:2:34.830

分钟和纳秒不是问题:

    System.out.println(duration.toMinutes());
    System.out.println(duration.toNanos());

但是我该如何从这个例子中获得34秒钟的时间?

4
你有没有阅读过Javadoc文档 - chrylis -cautiouslyoptimistic-
2
这个回答是否解决了你的问题?如何在Java中格式化持续时间?(例如格式化为H:MM:SS) - M. Prokhorov
你可以使用 duration.getSeconds() 来完成。 - Shafiul
@Shafiul,不,它并不是你所想的那样。 - M. Prokhorov
3
我强烈怀疑 toMinutesPart()toSecondsPart()toNanosPart() 是这里需要的方法。 - Jon Skeet
显示剩余4条评论
2个回答

5
您所需要的是以下内容:
System.out.println(duration.getSeconds()%60);

或者,

System.out.println(duration.getSeconds() - duration.toMinutes()*60);

从Java 9开始,有一个专门的方法toSecondsPart()来处理此问题:

System.out.println(duration.toSecondsPart());

0

通过一些数学运算,你可以得到预期的结果。

        long minutes = duration.toMinutes();
        long seconds = duration.getSeconds() % 60;
        long nanoSeconds = duration.toNanos() % 1000_000_000L;
        System.out.println(String.format("%d:%d.%d", minutes, seconds, nanoSeconds));

输出:

2:34.830

编辑: 在@M. Prokhorov的评论之后,将其延长几个小时也是类似的。
    long hours = duration.toHours();
    long minutes = duration.toMinutes() % 60;

并将其格式化为:

System.out.println(String.format("%d:%d:%d.%d", hours, minutes, seconds, nanoSeconds));

输出:

0:2:34.830

如果OP对这个打印输出的持续时间为几百分钟没有意见的话。 - M. Prokhorov
假设从示例中可以推断出,他对精确到分钟的兴趣为真。 - Shafiul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接