Java 8の2つの期間を比較するにはどうすればよいですか?Java 8の2つのjava.time.Periodを比較するにはどうすればよいですか?
など。
Period one = Period.of(10,0,0);
Period two = Period.of(8,0,0);
この場合、1は2より大きい。
Java 8の2つの期間を比較するにはどうすればよいですか?Java 8の2つのjava.time.Periodを比較するにはどうすればよいですか?
など。
Period one = Period.of(10,0,0);
Period two = Period.of(8,0,0);
この場合、1は2より大きい。
JB Nizetが正しく言った。 期間を比較することはできません。期間クラスのjava文書ごとに、期間(期間)と同様のクラスがあり、ビジネス要件に応じて使用することができます。
"期間と期間は、ZonedDateTimeに追加された夏時間の処理が異なります。期間には正確な秒数が追加されるため、1日の期間は常に正確に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));
2つの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();
}
期間は比較できません。そしてそれには理由があります。例えば:30日の期間より1か月の期間が大きいか小さいか?答えはそれが依存しているということです。 2つの期間を特定のLocalDateに追加し、2つのLocalDateのどちらが大きいかを確認することができます。しかし、結果はあなたがどのLocalDateから出発するかによって決まります。 –
@JBNizet JSR-310デザイナーは、「期間」は完全ではないと訂正してはなりませんが、「P1M-310」を迂回する狂った定義と実装でisNegative() 30D "問題。非常に病気。 –