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

[スポンサーリンク]

サイト内検索
プロフィール

プロフィール

[Name : じゃぶじゃぶ(@jbjb_2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

[スポンサードリンク]