Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีเปรียบเทียบวันที่ใน Java หลายวิธี


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คำแนะนำ
LocalDateisBefore, isAfter, isEqual, compareToboolean / intใช่แนะนำ #1
LocalDateTimeisBefore, isAfter, isEqual, compareToboolean / intใช่แนะนำสำหรับวันที่+เวลา
Datebefore, after, equals, compareToboolean / intไม่ (mutable)Legacy
Calendarbefore, after, equals, compareToboolean / intไม่Legacy

Best Practice

  • ใช้ LocalDate / LocalDateTime สำหรับโค้ดใหม่ทุกโปรเจกต์
  • หลีกเลี่ยง Date และ Calendar ยกเว้นต้องรองรับ Legacy code
  • ใช้ compareTo() เมื่อต้องการค่าตัวเลขสำหรับ sorting
  • ใช้ isBefore()/isAfter() เมื่อต้องการ boolean เฉยๆ อ่านง่ายกว่า