Javaで2つの日付と時刻を比較する方法
Javaで2つの日付や時刻を比較するには、java.time.LocalDateTimeクラスを利用するのが一般的です。このクラスはタイムゾーン情報を持たない「ローカルの日付と時刻」を表すため、従来のjava.util.Dateの代わりとしても使用できます。
LocalDateTimeクラスには、日付と時刻を比較するための便利なメソッドが複数用意されています。
- isBefore():呼び出し元の日時が、引数に指定した日時より前(過去)の場合にtrueを返します。
- isAfter():呼び出し元の日時が、引数に指定した日時より後(未来)の場合にtrueを返します。
- isEqual():両方の日時が同一である場合にtrueを返します。
例1:LocalDateTimeクラスで日時を比較する
import java.time.LocalDateTime;
public class Test {
public static void main(String args[]) {
LocalDateTime dateTime1 = LocalDateTime.of(2007, 11, 25, 10, 15, 45);
LocalDateTime dateTime2 = LocalDateTime.of(1999, 9, 12, 7, 25, 55);
Boolean bool1 = dateTime1.isAfter(dateTime2);
Boolean bool2 = dateTime1.isBefore(dateTime2);
Boolean bool3 = dateTime1.isEqual(dateTime2);
if (bool1) {
System.out.println(dateTime1 + " is after " + dateTime2);
} else if (bool2) {
System.out.println(dateTime1 + " is before " + dateTime2);
} else if (bool3) {
System.out.println(dateTime1 + " is equal to " + dateTime2);
}
}
}
実行結果
2007-11-25T10:15:45 is after 1999-09-12T07:25:55
この例では、dateTime1(2007年11月25日)の方がdateTime2(1999年9月12日)より後の日時であるため、isAfter()がtrueを返しています。
例2:DateクラスとSimpleDateFormatで文字列の日時を比較する
文字列形式の日時データを比較したい場合は、SimpleDateFormatクラスで解析(パース)してDateオブジェクトに変換してから、after()・before()・equals()メソッドを使って比較します。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CreateDateTime {
public static void main(String args[]) throws ParseException {
String dateTimeStr1 = "26-09-1989 8:27:45";
String dateTimeStr2 = "12-11-2010 2:30:12";
// SimpleDateFormatクラスのインスタンス化
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
Date dateTime1 = formatter.parse(dateTimeStr1);
Date dateTime2 = formatter.parse(dateTimeStr2);
Boolean bool1 = dateTime1.after(dateTime2);
Boolean bool2 = dateTime1.before(dateTime2);
Boolean bool3 = dateTime1.equals(dateTime2);
if (bool1) {
System.out.println(dateTimeStr1 + " is after " + dateTimeStr2);
} else if (bool2) {
System.out.println(dateTimeStr1 + " is before " + dateTimeStr2);
} else if (bool3) {
System.out.println(dateTimeStr1 + " is equal to " + dateTimeStr2);
}
}
}
実行結果
26-09-1989 8:27:45 is before 12-11-2010 2:30:12
このように、扱う日時データの形式に応じて適切なクラスを選べば、日付と時刻の比較は簡単に行えます。新規のプロジェクトでは、スレッドセーフで直感的なAPIを持つjava.timeパッケージ(LocalDateTime)の利用が推奨されている点にも注意しましょう。
-
Javaで2つの画像を比較する方法:RGB差分から類似度をパーセンテージで算出
2つの画像を比較する手順 Javaで2枚の画像を比較し、その差分をパーセンテージとして求めるには、以下の手順に従います。 ImageIO.read() メソッドを使って、比較対象となる2枚の画像を読み込みます。 それぞれの画像の幅と高さを取得し、両者のサイズが一致しているかを確認します。 各画像のピクセル値を取得し、そこからRGB(赤・緑・青)の各値を取り出します。 2枚の画像の対応するピクセル同士のRGB値の差をすべて合計します。 次の式を使って、差分の割合(パーセンテージ)を計算します。 Average = difference / (width × height × 3); Perc
-
Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説
Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare