我想知道日期之间的确切时间,以小时为单位。在 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
.
这就很好用了。
double durH = dur.toMinutes()/60.;
// or
double durH = dur.toMinutes()/60.f;
System.out.println(durH);
打印
4.75
试试吧 (float) duration.toMinutes() / Duration.ofHours(1).toMinutes()
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
而不是将它们转换为十进制。
你可以这样做。
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改为浮动。
你需要在除法前投掷成浮点数,像这样。
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() 返回一个长数。
[...]通过将秒数除以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
你必须除以一个 double
或 float
,否则就会出现整数除法。