3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android Java 日付のみを比較する(時間は除外)

Last updated at Posted at 2018-04-06

Javaで日時を比較する際に、時間は除外して日付のみを比較したかった。
"2018/04/06 12:15:27" と "2018/04/06 20:47:55" を比較して同じ日かのみを(時間は除外して)判定したかったのでメモ。

なんかすごく泥臭いやり方のような気がするけど、元がタイムスタンプでもDateクラスでもとりあえずCalendarクラスのインスタンス化し、時分秒ミリ秒に0をセットして、CalendarクラスのcompareTo()メソッドで比較するだけです。
なんかもっとスマートなやり方無いのでしょうか(Java初心者の小言)

// 適当な日時のタイムスタンプから00:00:00:000のCalendarインスタンス作成
int oneDayTimeStamp = 1523017440;
Calendar oneDayCal = Calendar.getInstance();
oneDayCal.setTimeInMillis(oneDayTimeStamp * 1000L);
// 時分秒ミリ秒に0をセット
oneDayCal.set(Calendar.HOUR_OF_DAY, 0);
oneDayCal.set(Calendar.MINUTE, 0);
oneDayCal.set(Calendar.SECOND, 0);
oneDayCal.set(Calendar.MILLISECOND, 0);

// 現在日時の00:00:00:000のCalendarインスタンス作成
Calendar now = Calendar.getInstance();
// 時分秒ミリ秒に0をセット
now.set(Calendar.HOUR_OF_DAY, 0);
now.set(Calendar.MINUTE, 0);
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);

if (oneDayCal.compareTo(now) == 0) {
    // 0だと日付が同じ
}

 

@swordone さんにコメント頂きまして、こちらが断然スマートです!

public int compareByDate (Calendar c1, Calendar c2) {
    int result = c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR);
    return (result != 0) ? result : c1.get(Calendar.DAY_OF_YEAR)- c2.get(Calendar.DAY_OF_YEAR);
}

 

@Luice さんからのコメント頂いた方法です。ライブラリを追加する必要がありますが、truncatedCompareToメソッドだけで済みます。truncatedCompareToメソッドが中でやっているのは、時分秒ミリ秒を0にするのtruncateメソッドを実行して、その後にCalendarオブジェクトからタイムスタンプを取得して比較しています。
AndroidのAPIとしてtruncatedCompareToメソッドが元々あって欲しいな〜と思ったり。(Kotlinはどうなんだろう)

// commons-lang3-3.7.jarをlibsフォルダにいれてbuild.gradleに以下記述を追加
compile files('libs/commons-lang3-3.7.jar') 
// Calendar : c1, Calendar : c2
if (DateUtils.truncatedCompareTo(c1, c2, Calendar.HOUR_OF_DAY) == 0) {
    // 0だと日付が同じ
}
3
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?