Java:有効期限チェックします

こんにちは、さるまりんです。

タイトルにあることをしたいんです。有効期限チェック。

例えば5分以内?例えば1時間以内?

これはある日時dateから指定時間以上経過したかを調べることでできますよね。

ということで「文字列で表された日時は現在より指定時間以上前?」をJavaで書いてみたいと思います。

早速プログラムです。

有効期限は5分、チェックする日時を2019年5月26日 23:42:30としています。

String datetimeString = "2019-05-26 23:42:30"; // 日時の文字列
String format = "yyyy-MM-dd HH:mm:ss"; // 日時の文字列のフォーマット
int x = 5; // X分前のX

// 日付の文字列をDateオブジェクトに変換
DateFormat df = new SimpleDateFormat(format);
Date date;
try {
	date = df.parse(datetimeString);
} catch (ParseException e) {
	// 変換に失敗
	date = null;
}

// 変換できたら比較します。
if (date != null) {
	// 現在からX分前のDateオブジェクトを作成
	// 現在日時
	Calendar c = Calendar.getInstance();
	// からX分引き
	c.add(Calendar.MINUTE, -x);
	// Dateオブジェクトにします
	Date past = c.getTime();

	// 現在の日時を表示
	System.out.println("現在は" + df.format(new Date()) + "です");
	// 日付dateが作成されたDate(past)と同じかそれよりも前ならx分以上前です。
	if (date.equals(past) || date.before(past)) {
		System.out.println(datetimeString + "は現在より" + x + "分以上前です");
	} else {
		System.out.println(datetimeString + "は現在より" + x + "分以上前じゃないです");
	}
}

実行するとこんな風に表示されます。

2019年5月26日 23:47:20に実行。有効期限前です。

現在は2019-05-26 23:47:20です
2019-05-26 23:42:30は現在より5分以上前じゃないです

2019年5月26日 23:47:33に実行。有効期限後です。

現在は2019-05-26 23:47:33です
2019-05-26 23:42:30は現在より5分以上前です

Calendar.getInstance()は現在日時で初期化されたCalendarオブジェクトを返します。

[Calendarオブジェクト].add()は指定した期間をCalendarオブジェクトに足します。進めるということですね。そして指定する数値を負の数にすると逆に戻してくれます。上のプログラムではCalendar.MINUTE(分)を単位として、-X分足すことでX分前にしています。

[Calendarオブジェクト].getTime()でそのCalendarオブジェクトが示す日時をDateクラスのオブジェクトとして取得することができます。

ある日付から指定時間前のDateオブジェクトを作成するメソッドがあると便利かなと思います。こんな感じですかね。

/**
 * dateの指定期間前のDateオブジェクトを作成
 * @param date 元となるDateオブジェクト
 * @param field 単位(field)を表す値 Calendar.HOUR、MINUTEなど
 * @param amount 期間を表す数値
 * @return dateのfield、amountで指定された期間前のDateオブジェクト (Calendar.MINUTE, -5)なら5分前
 */
public Date getDateByPeriodOfTime(Date date, int field, int amount) {
	if (date == null) return date;
	Calendar c = Calendar.getInstance();
	c.setTime(date);
	c.add(field, amount);
	return c.getTime();
}

いつも思います。もっと格好良くかけるんじゃないかって。

勉強します。プログラムもスマートに。

読んでくださってありがとうございます。

ではまた!