Java มีหลายวิธีในการเปรียบเทียบวันที่ (Compare Dates) ขึ้นอยู่กับคลาสที่ใช้
วิธีที่ 1: ใช้ LocalDate (Java 8+) - แนะนำมากที่สุด
LocalDate เป็น immutable, thread-safe ไม่มี time zone มีเมธอด isBefore(), isAfter(), isEqual()
import java.time.LocalDate;
public class Sample {
public static void main(String args[]) {
LocalDate date1 = LocalDate.of(2007, 11, 25);
LocalDate date2 = LocalDate.of(1999, 9, 12);
boolean isAfter = date1.isAfter(date2);
boolean isBefore = date1.isBefore(date2);
boolean isEqual = date1.isEqual(date2);
if (isAfter) {
System.out.println(date1 + " is after " + date2);
} else if (isBefore) {
System.out.println(date1 + " is before " + date2);
} else {
System.out.println(date1 + " is equal to " + date2);
}
}
}
ผลลัพธ์
2007-11-25 is after 1999-09-12
วิธีที่ 2: ใช้ java.util.Date (Legacy)
มีเมธอด before(), after(), equals()
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
public static void main(String args[]) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM");
Date date1 = formatter.parse("2007-11-25");
Date date2 = formatter.parse("1999-9-12");
if (date1.after(date2)) {
System.out.println(date1 + " is after " + date2);
} else if (date1.before(date2)) {
System.out.println(date1 + " is before " + date2);
} else {
System.out.println(date1 + " is equal to " + date2);
}
}
}
ผลลัพธ์
Sun Jan 11 00:00:00 IST 2009 is after Thu Dec 09 00:00:00 IST 1999
วิธีที่ 3: ใช้ Calendar (Legacy)
import java.util.Calendar;
public class Sample {
public static void main(String args[]) {
Calendar obj1 = Calendar.getInstance();
obj1.set(2007, 11, 25); // month 0-based: 11 = December
Calendar obj2 = Calendar.getInstance();
obj2.set(1999, 9, 15); // month 9 = October
if (obj1.after(obj2)) {
System.out.println(obj1.getTime() + " is after " + obj2.getTime());
} else if (obj1.before(obj2)) {
System.out.println(obj1.getTime() + " is before " + obj2.getTime());
} else {
System.out.println(obj1.getTime() + " is equal to " + obj2.getTime());
}
}
}
วิธีที่ 4: ใช้ compareTo() (สำหรับ Date และ LocalDate)
import java.time.LocalDate;
import java.util.Date;
public class CompareExample {
public static void main(String args[]) {
// LocalDate
LocalDate d1 = LocalDate.of(2020, 1, 15);
LocalDate d2 = LocalDate.of(2020, 1, 10);
int cmp = d1.compareTo(d2); // 1 = after, -1 = before, 0 = equal
System.out.println("LocalDate compareTo: " + cmp);
// java.util.Date
Date date1 = new Date(1000000000000L);
Date date2 = new Date(2000000000000L);
cmp = date1.compareTo(date2);
System.out.println("Date compareTo: " + cmp);
}
}
ตารางเปรียบเทียบ
| คลาส | เมธอด | คืนค่า | Thread-Safe | คำแนะนำ |
|---|---|---|---|---|
| LocalDate | isBefore, isAfter, isEqual, compareTo | boolean / int | ใช่ | แนะนำ #1 |
| LocalDateTime | isBefore, isAfter, isEqual, compareTo | boolean / int | ใช่ | แนะนำสำหรับวันที่+เวลา |
| Date | before, after, equals, compareTo | boolean / int | ไม่ (mutable) | Legacy |
| Calendar | before, after, equals, compareTo | boolean / int | ไม่ | Legacy |
Best Practice
- ใช้ LocalDate / LocalDateTime สำหรับโค้ดใหม่ทุกโปรเจกต์
- หลีกเลี่ยง Date และ Calendar ยกเว้นต้องรองรับ Legacy code
- ใช้
compareTo() เมื่อต้องการค่าตัวเลขสำหรับ sorting - ใช้
isBefore()/isAfter()เมื่อต้องการ boolean เฉยๆ อ่านง่ายกว่า