java 未来日、過去日のチェック処理
-
カテゴリ:
- Java
JAVAで日付型の変数が未来日なのか、過去日なのかをチェックするサンプルを作成しました。
日付のチェックには「compareTo」を使っています。
「compareTo」は比較する日付を引数に渡すと、比較元の日付が1秒でも未来日だった場合「1」を返します。
反対に1秒でも過去日だった場合は「-1」が返ってきます。
両者が同じ日付の場合は「0」が返ってくる仕様です。
検証
サンプル
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Sample1 {
public static void main(String[]args) throws ParseException {
// 【Dateクラスの差分】
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date1 = sdf.parse("2020/06/15 06:30:50");
Date date2 = sdf.parse("2020/06/15 00:00:00");
System.out.println("date1 : " + sdf.format(date1));
System.out.println("date2 : " + sdf.format(date2));
int diff1 = date1.compareTo(date2);
System.out.println(sdf.format(date1.getTime()) + " - " + sdf.format(date2.getTime()) + " : " + String.valueOf(diff1));
// 【Calendarクラスの差分】
Calendar calendar1 = Calendar.getInstance();
calendar1.set(2020, 5, 15, 9, 45, 10);
System.out.println("calendar1 : " + sdf.format(calendar1.getTime()));
int dff2 = calendar1.compareTo(calendar1);
System.out.println(sdf.format(calendar1.getTime()) + "同士の差分 : " + String.valueOf(dff2));
Calendar calendar2 = Calendar.getInstance();
calendar2.set(2020, 5, 15, 9, 45, 11);
System.out.println("calendar2 : " + sdf.format(calendar2.getTime()));
int b = calendar1.compareTo(calendar2);
// 1秒の差分
System.out.println(sdf.format(calendar1.getTime()) + " - " + sdf.format(calendar2.getTime()) + " : " + String.valueOf(b));
Calendar calendar3 = Calendar.getInstance();
calendar1.set(2020, 6, 15, 9, 45, 10);
System.out.println("calendar3 : " + sdf.format(calendar3.getTime()));
int c = calendar1.compareTo(calendar3);
// 1が月の差分
System.out.println(sdf.format(calendar3.getTime()) + " - " + sdf.format(calendar1.getTime()) + " : " + String.valueOf(c));
}
}
結果
【結果】
date1 : 2020/06/15 06:30:50
date2 : 2020/06/15 00:00:00
2020/06/15 06:30:50 - 2020/06/15 00:00:00 : 1
calendar1 : 2020/06/15 09:45:10
2020/06/15 09:45:10同士の差分 : 0
calendar2 : 2020/06/15 09:45:11
2020/06/15 09:45:10 - 2020/06/15 09:45:11 : -1
calendar3 : 2020/06/15 15:08:39
2020/06/15 15:08:39 - 2020/07/15 09:45:10 : 1
サンプルソース
サンプル
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Sample2 {
public static void main(String[]args) throws ParseException {
// 【Dateクラスの差分】
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date1 = sdf.parse("2020/06/15 06:30:50");
Date date2 = sdf.parse("2020/06/15 00:00:00");
System.out.println("date1 : " + sdf.format(date1));
System.out.println("date2 : " + sdf.format(date2));
int diff1 = diffDate(date1, date2);
if(diff1 > 0) {
System.out.println("date1は未来日です");
} elseif (diff1 < 0) {
System.out.println("date1は過去日です");
} elseif (diff1 == 0) {
System.out.println("date1とdate2は同じ日付です。");
}
// 【Calendarクラスの差分】
Calendar calendar1 = Calendar.getInstance();
calendar1.set(2020, 5, 15, 9, 45, 10);
System.out.println("calendar1 : " + sdf.format(calendar1.getTime()));
Calendar calendar2 = Calendar.getInstance();
calendar2.set(2020, 5, 15, 9, 45, 11);
System.out.println("calendar2 : " + sdf.format(calendar2.getTime()));
int diff2 = diffDate(calendar1, calendar2);
if(diff2 > 0) {
System.out.println("calendar1は未来日です");
} elseif (diff2 < 0) {
System.out.println("calendar1は過去日です");
} elseif (diff2 == 0) {
System.out.println("calendar1とcalendar2は同じ日付です。");
}
}
public int diffDate(Date date1, Date date2) {
try {
if(date1 == null || date2 == null) return null;
return date1.compareTo(date2);
} catch (ParseException e) {
return null;
}
}
public int diffDate(Calendar calendar1, Calendar calendar2 {
try {
if(calendar1 == null || calendar2 == null) return null;
return calendar1.compareTo(calendar2);
} catch (ParseException e) {
return null;
}
}
}
結果
【結果】
date1 : 2020/06/15 06:30:50
date2 : 2020/06/15 00:00:00
date1は未来日です
calendar1 : 2020/06/15 09:45:10
calendar2 : 2020/06/15 09:45:11
calendar1は過去日です
オーバーロードを利用して、引数がDate型でもCalendar型でも意識せずに使えるようにしています。
あとは、利用者側で日付の比較チェックに使うもよし、未来日のチェックに使うもよし、好きなように利用できます。
投稿日:2020-06-15
更新日:2020-10-06