如何比较java 8中的两个java.time.Period?

yet*_*der 7 java date period java-8

如何比较 java 8 中的两个句点?

例如

Period one = Period.of(10,0,0);
Period two = Period.of(8,0,0);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,一大于二。

Hon*_*dek 5

Period确实,由于未定义一个月的标准长度,因此在一般情况下比较两个对象没有意义。

但是,在许多情况下,您可以很好地接受与以下类似的实现。该合同将类似于以下合同compareTo()

public int comparePeriodsApproximately(Period p1, Period p2) {
    return period2Days(p1) - period2Days(p2);
}

private int period2Days(Period p) {
    if (p == null) {
        return 0;
    }
    return (p.getYears() * 12 + p.getMonths()) * 30 + p.getDays();
}
Run Code Online (Sandbox Code Playgroud)


小智 3

JB Nizet 说得对。您无法比较期间,根据Period类中的Java文档,Java中提供了与Period(Duration)类似的类,您可以根据您的业务需求使用它。

“当添加到 ZonedDateTime 时,持续时间和周期在夏令时的处理上有所不同。持续时间将添加精确的秒数,因此一天的持续时间始终恰好是 24 小时。相比之下,周期将添加概念上的一天,试图保持当地时间。”

Period period = Period.of(10, 0, 0);
Period period2 = Period.of(10, 0, 0);

// No compareTo method in period
System.out.println(period.compareTo(period2));

Duration duration = Duration.ofDays(3);
Duration duration2 = Duration.ofDays(3);

// Can compare durations as it gives you the exact time
System.out.println(duration.compareTo(duration2));
Run Code Online (Sandbox Code Playgroud)