1. ホーム

[解決済み】時間部分を除いた2つの日付を比較する方法は?

2022-04-06 09:53:04

質問

java.util.Dateの時間部分を無視するcompareToメソッドを持ちたいのですが、どうすればいいですか?これを解決する方法はいくつもあると思うんだ。一番簡単な方法は何でしょうか?

解決方法は?

更新:当時はJoda Timeが立派に推奨されていましたが、Joda Timeを使うには java.time ライブラリの代わりに、可能であればJava 8+の


私の好みは ジョダ時間 を使えば、驚くほど簡単にできます。

DateTime first = ...;
DateTime second = ...;

LocalDate firstDate = first.toLocalDate();
LocalDate secondDate = second.toLocalDate();

return firstDate.compareTo(secondDate);

EDIT: コメントにあるように、もしあなたが DateTimeComparator.getDateOnlyInstance() よりシンプルになります :)

// TODO: consider extracting the comparator to a field.
return DateTimeComparator.getDateOnlyInstance().compare(first, second);

("Use Joda Time"は、以下のことを尋ねるほぼすべてのSO質問の基本です。 java.util.Date または java.util.Calendar . 徹底的に優れたAPIなのです。もしあなたが なんでも 日付や時刻を重要視しているのであれば、可能であれば本当に使うべきです)。

もし、あなたが絶対に 強制 のインスタンスを作成し、ビルトイン API を使用する必要があります。 Calendar を、適切な日付と適切なタイムゾーンを指定してください。そして、各カレンダーの時、分、秒、ミリ秒の各フィールドを0に設定し、結果の時間を比較することができます。Jodaのソリューションに比べれば、間違いなく不格好ですが :)

タイムゾーンの部分は重要ですね。 java.util.Date 常に UTCを基準としています。私が日付に興味を持ったほとんどの場合、それは日付でした 特定のタイムゾーンで . これだけでは Calendar またはJoda Timeを使用します(タイムゾーンを自分で考慮したい場合は別ですが、これはお勧めしません)。

アンドロイド開発者向けクイックリファレンス

//Add joda library dependency to your build.gradle file
dependencies {
     ...
     implementation 'joda-time:joda-time:2.9.9'
}

サンプルコード(例)

DateTimeComparator dateTimeComparator = DateTimeComparator.getDateOnlyInstance();

Date myDateOne = ...;
Date myDateTwo = ...;

int retVal = dateTimeComparator.compare(myDateOne, myDateTwo);

if(retVal == 0)
   //both dates are equal
else if(retVal < 0)
   //myDateOne is before myDateTwo
else if(retVal > 0)
   //myDateOne is after myDateTwo