如何将 int(分钟)转换为 java 中的 Duration?

How can I turn an int (minutes) into a Duration in java?

我正在尝试将持续时间与代表分钟的整数(因此是另一个持续时间)进行比较,以确定它是更长还是更短的时间。我正在尝试使用 compareTo(Duration duration) 方法,但我不能使用 int 作为参数。我如何将该整数(分钟)转换为持续时间?

您可以使用 ofMinutes 静态方法创建以分钟为单位的持续时间。所以,作为一个愚蠢的例子

int compareDurations(Duration d) {
    int myMinutes = 5;
    Duration durationInMinutes = Duration.ofMinutes(myMinutes);
    return d.compareTo(durationMinutes);
}

一种方式,Duration:

Duration duration = Duration.of(10, ChronoUnit.SECONDS);
int seconds = 5;
System.out.println(duration.getSeconds() - seconds);

请注意,ChronoUnit 有很多有用的常量成员,例如 MINUTESDAYSWEEKSCENTURIES

另一种方式,LocalTime:

LocalTime localTime = LocalTime.of(0, 0, 15); //hh-mm-ss
int seconds = 5;
System.out.println(localTime.getSecond() - seconds);

我总是觉得涉及 compareTo() 的代码难以阅读。因此,对于大多数目的,我更愿意以相反的方式进行:将您的 Duration 转换为分钟并使用普通 <>.

进行比较
    int minutes = 7;
    Duration dur = Duration.ofMinutes(7).plusSeconds(30);
    
    if (minutes > dur.toMinutes()) {
        System.out.println("The minutes are longer");
    } else {
        System.out.println("The minutes are shorter or the same");
    }

输出:

The minutes are shorter or the same

如果您需要知道分钟数是否严格缩短,代码当然会更长一些(不是开玩笑)。在某些情况下,一种方法确实涉及将分钟转换为 Duration

    if (minutes > dur.toMinutes()) {
        System.out.println("The minutes are longer");
    } else if (Duration.ofMinutes(minutes).equals(dur)) {
        System.out.println("The minutes are the same");
    } else {
        System.out.println("The minutes are shorter");
    }

The minutes are shorter

我真的希望 Duration class 有方法 isLonger()isShorter()(尽管刚刚建议的名称在否定时可能不太清楚持续时间)。然后我会建议将分钟转换为 Duration,就像在接受的答案中一样。