Duration.between()不能按我的要求工作。

问题描述 投票:1回答:6

我想知道日期之间的确切时间,以小时为单位。在 between-方法似乎只考虑整数小时的差异。为什么会这样,我可以用什么来代替?

Duration dur = Duration.between(
    LocalDateTime.of(2020, 5, 20, 12, 00), LocalDateTime.of(2020, 5, 20, 16, 45));

float durH = dur.toHours(); 

System.out.println(durH);

这段代码给我的答案是 4.0 但我想要的是 4.75.

java datetime difference duration
6个回答
-1
投票

这就很好用了。

double durH = dur.toMinutes()/60.;
// or
double durH = dur.toMinutes()/60.f;

System.out.println(durH);

打印

4.75

1
投票

试试吧 (float) duration.toMinutes() / Duration.ofHours(1).toMinutes()


0
投票

Duration#toHours 返回一个 long. 你只看到它是 4.0 因为你把它存储为 float 并得到隐式转换。

你想让它把分钟的部分通过 Duration#toMinutesPart,除以60(如 float)并将其添加到小时中。

System.out.println((dur.toHours() + dur.toMinutesPart()/60f)); // prints 4.75

需要注意的是,当日历发生变化,小时没有60秒时,这个方法就失效了。世界上有很多情况下,一分钟没有60秒--首先想到的是闰秒,但也有其他情况。因此,建议将此类时间显示为 4:45 而不是将它们转换为十进制。


0
投票

你可以这样做。

        Duration duration = Duration.between(LocalDateTime.of(2020, 5, 20, 12, 00), LocalDateTime.of(2020, 5, 20, 16, 45));    

        float hourWithDecimals = (float) duration.toMinutes() / Duration.ofHours(1).toMinutes();

        System.out.println(hourWithDecimals);

通过这个片段,你可以得到一个更精确的分数值。duration.toMinutes()然后 "投 "到小时 Duration.ofHours(1).toMinutes() 由div改为浮动。


0
投票

你需要在除法前投掷成浮点数,像这样。

public static void main(String[] args) {

    Duration dur = Duration.between(LocalDateTime.of(2020, 5, 20, 12, 00), LocalDateTime.of(2020, 5, 20, 16, 45));

    double durh = (double)dur.toMinutes()/60;

    System.out.println(durh);
}

因为dur. toMinutes() 返回一个长数。


-2
投票

方法 Duration#toHours

[...]通过将秒数除以3600返回持续时间的总小时数。

由于该方法返回的结果是 long,小数部分被切掉了。

你可以通过明确地做同样的事情来获得小数部分。

Duration dur = Duration.between(
    LocalDateTime.of(2020, 5, 20, 12, 00), LocalDateTime.of(2020, 5, 20, 16, 45));

double durH = dur.toSeconds() / 3600.0;

System.out.println(durH); // gives 4.75

你必须除以一个 doublefloat,否则就会出现整数除法。

© www.soinside.com 2019 - 2024. All rights reserved.