Javaの日時を比較するサンプルです。
目次
日時の比較 | 日にちを比較する(LocalDate) |
時間を比較する(LocalDateTime) | |
日にちを比較する(Date) | |
日にちを比較する(Calendar) |
日にちを比較する(LocalDate)
public boolean isAfter(ChronoLocalDate other) |
public boolean isBefore(ChronoLocalDate other) |
public boolean isEqual(ChronoLocalDate other) |
isAfterメソッドは、A>Bのときにtrueになります。
isBeforeメソッドは、A<Bのときにtrueになります。
isEqualメソッドは、A=Bのときにtrueになります。
package test1;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Test1 {
public static void main(String[] args) {
// LocalDate date1 = LocalDate.of(2020,8,3);
// LocalDate date2 = LocalDate.of(2020,7,30);
final String FORMAT = "yyyy-MM-dd";
// 1.年月日をセット
LocalDate date1 = LocalDate.parse
("2020-08-03", DateTimeFormatter.ofPattern(FORMAT));
// 2.年月日をセット
LocalDate date2 = LocalDate.parse
("2020-07-30", DateTimeFormatter.ofPattern(FORMAT));
boolean d1 = date1.isAfter(date2);
System.out.println(d1); // true
boolean d2 = date1.isBefore(date2);
System.out.println(d2); // false
boolean d3 = date1.isEqual(date2);
System.out.println(d3); // false
LocalDate date3 = LocalDate.of(2020,8,3);
LocalDate date4 = LocalDate.of(2020,8,3);
boolean d4 = date3.isEqual(date4);
System.out.println(d4); // true
}
}
13,16行目は、年月日がyyyy-MM-ddのString型の場合です。7,8行目の指定方法でも可能です。
時間を比較する(LocalDateTime)
isAfterメソッドは、A>Bのときにtrueになります。
isBeforeメソッドは、A<Bのときにtrueになります。
isEqualメソッドは、A=Bのときにtrueになります。
package test1;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Test1 {
public static void main(String[] args) {
// LocalDateTime date1 = LocalDateTime.of(2020,8,3,15,20,10);
// LocalDateTime date2 = LocalDateTime.of(2020,8,3,14,50,10);
final String FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
// 指定日時をセット1
LocalDateTime date1 = LocalDateTime.parse
("2020-08-03 15:20:10.000", DateTimeFormatter.ofPattern(FORMAT));
// 指定日時をセット2
LocalDateTime date2 = LocalDateTime.parse
("2020-08-03 14:50:10.000", DateTimeFormatter.ofPattern(FORMAT));
boolean d1 = date1.isAfter(date2);
System.out.println(d1); // true
boolean d2 = date1.isBefore(date2);
System.out.println(d2); // false
boolean d3 = date1.isEqual(date2);
System.out.println(d3); // false
LocalTime date3 = LocalTime.of(15,20,10);
LocalTime date4 = LocalTime.of(14,50,10);
boolean d4 = date3.isAfter(date4);
System.out.println(d4); // true
}
}
14,18行目は、年月日がyyyy-MM-dd HH:mm:ss.SSSのString型の場合です。8,9行目の指定方法でも可能です。
LocalTimeクラスは、時間のみを表します。
以下は、Java8 API仕様のLocalDateTimeクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDateTime.html
日にちを比較する(Date)
Dateクラスで日にちを比較するサンプルです。
package test1;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test1 {
public static void main(String[] args) {
SimpleDateFormat sdformat1 = new SimpleDateFormat("yyyyMMdd");
Date date1,date2;
try {
date1 = sdformat1.parse("20200803");
date2 = sdformat1.parse("20190730");
boolean d1 = date1.after(date2);
System.out.println(d1); // true
boolean d2 = date1.before(date2);
System.out.println(d2); // false
boolean d3 = date1.equals(date2);
System.out.println(d3); // false
if (date1.compareTo(date2) > 0){ //afterと同じ
System.out.println("trueです"); // trueです
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
12行目は、2020年8月3日を意味します。
13行目は、2020年7月30日を意味します。
15行目は、afterメソッドです。A>Bのときにtrueになります。
18行目は、beforeメソッドです。A<Bのときにtrueになります。
21行目は、equalsメソッドです。A=Bのときにtrueになります。
24行目は、compareToメソッドで比較しています。0より大きい/0より小さい/0であるで判定できます。
日にちを比較する(Calendar)
Calendarクラスで日にちを比較するサンプルです。
package test1;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Test1 {
public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
cal1.set(Calendar.YEAR, 2020); // 2020年
cal1.set(Calendar.MONTH, 7); // 8月 (月は0から始まる)
cal1.set(Calendar.DAY_OF_MONTH, 3); //日
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.YEAR, 2020); // 年
cal2.set(Calendar.MONTH, 6); // 7月 (月は0から始まる)
cal2.set(Calendar.DAY_OF_MONTH, 30); //日
boolean d1 = cal1.after(cal2);
System.out.println(d1); // true
boolean d2 = cal1.before(cal2);
System.out.println(d2); // false
boolean d3 = cal1.equals(cal2);
System.out.println(d3); // false
Date date1 = cal1.getTime();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd");
String fdate1 = sdf1.format(date1);
System.out.println(fdate1); // 2020/08/03
Date date2 = cal2.getTime();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
String fdate2 = sdf2.format(date2);
System.out.println(fdate2); // 2020/07/30
}
}
10~13行目は、2020年8月3日を意味します。
15~18行目は、2020年7月30日を意味します。
20行目は、afterメソッドです。A>Bのときにtrueになります。
23行目は、beforeメソッドです。A<Bのときにtrueになります。
26行目は、equalsメソッドです。A=Bのときにtrueになります。
関連の記事