1. ホーム

[解決済み】2つのjava.util.Datesを比較して、同じ日であるかどうかを確認する

2022-04-04 08:47:55

質問

2つのファイルを比較する必要があります。 Date のようなものです(例 date1date2 ) を思いつき、それを boolean sameDay という2つの真である Date は同じ日を共有し、そうでない場合は偽となります。

どうすればいいのでしょうか?ここには混乱の渦があるようです...そして、私は可能な限りJDKを越えて他の依存関係を引っ張ることを避けたいと考えています。

を明確にすることです。 もし date1date2 が同じ年、月、日を共有している場合、次のようになります。 sameDay は真、それ以外は偽となります。タイムゾーンを指定できればいいのですが、動作がわかっていれば、GMTでもローカルタイムでもかまいません。

もう一度、明確にします。

date1 = 2008 Jun 03 12:56:03
date2 = 2008 Jun 03 12:59:44
  => sameDate = true

date1 = 2009 Jun 03 12:56:03
date2 = 2008 Jun 03 12:59:44
  => sameDate = false

date1 = 2008 Aug 03 12:00:00
date2 = 2008 Jun 03 12:00:00
  => sameDate = false

解決方法は?

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
boolean sameDay = cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR) &&
                  cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);

同じ日」というのは、タイムゾーンが異なる場合、言うほど単純な概念ではないことに注意してください。上記のコードでは、両方の日付について、実行中のコンピューターで使用されているタイムゾーンに基づいた日を計算します。もしこれが必要でない場合は、関連するタイムゾーンを Calendar.getInstance() の呼び出しは、quot;同じ日" の正確な意味を決めた後に行ってください。

そうそう、ヨーダ・タイムの LocalDate を使えば、全体がもっとすっきりして簡単になります(ただし、タイムゾーンが絡む難しさは同じです)。