Java Duration.between()不适用于我想要的方式

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

SOLUTION:

double durH = dur.toHours()/60.0;   

问题是,正如我所提到的,我被一个整数除。即使我将其保存为浮点数/长整型,它也被除法转换,导致数字被除去了小数点。


原始帖子:

我想要确切的时间间隔(以小时为单位)。方法之间似乎只考虑整个小时的差异。为什么会这样,我该怎么做/使用呢?

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);
OUTPUT:
4.0
WHAT I WANT:
4.75

似乎无效的建议:

long durH = dur.toMinutes()/60;

^返回4.0

java difference duration
6个回答
0
投票

这很好用。

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

System.out.println(durH);

打印

4.75

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()为单位的更精确的值,然后将其以float形式通过div“投射”为小时Duration.ofHours(1).toMinutes()


0
投票

尝试:(float) duration.toMinutes() / Duration.ofHours(1).toMinutes()


0
投票

U需要在除法之前进行浮点运算,如下所示:

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()返回一个长数字。


-1
投票

Duration#toHours返回long。您仅将其视为4.0,因为您将其存储为float,并且隐式转换了它。

您希望它通过Duration#toMinutesPart来记录分钟,将其除以60(作为float),然后将其加到小时中:

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

请注意,当日历中有班次且小时没有60秒时,此功能将失效。世界上有很多实例,一分钟没有60秒-首先想到的是leap秒,还有其他一些实例。因此,建议将这些时间显示为4:45,而不要将其转换为小数。


-1
投票

方法Duration#toHours

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

当方法返回结果为Duration#toHours时,小数部分被切除。

您可以通过明确地执行相同的操作来获得小数部分。

long

请注意,您必须用Duration dur = Duration.between( LocalDateTime.of(2020, 5, 20, 12, 00), LocalDateTime.of(2020, 5, 20, 16, 45)); long durationSeconds = dur.toSeconds(); double durationHours = durationSeconds / (3600.0); System.out.println(durationHours); double来表示,否则必须用整数除法。

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