Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách so sánh hai ngày ở định dạng String trong Java

Lớp java.text.SimpleDateFormat được dùng để định dạng và phân tích chuỗi thành ngày và ngược lại.

  • Constructor chấp nhận String định dạng ngày và tạo đối tượng SimpleDateFormat.
  • Khởi tạo lớp bằng cách truyền định dạng mong muốn.
  • Phân tích chuỗi ngày bằng phương thức parse().
  • Lớp util.Date cung cấp before(), after(), equals() để so sánh.

Ví dụ: So sánh sau khi parse

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo {
    public static void main(String args[]) throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM");
        String dateStr1 = "2007-11-25";
        String dateStr2 = "1999-9-12";

        // Parse chuỗi thành Date
        Date date1 = formatter.parse(dateStr1);
        Date date2 = formatter.parse(dateStr2);

        Boolean bool1 = date1.after(date2);
        Boolean bool2 = date1.before(date2);
        Boolean bool3 = date1.equals(date2);

        if (bool1) {
            System.out.println(dateStr1 + " là sau " + dateStr2);
        } else if (bool2) {
            System.out.println(dateStr1 + " là trước " + dateStr2);
        } else if (bool3) {
            System.out.println(dateStr1 + " bằng " + dateStr2);
        }
    }
}

Kết quả

2007-11-25 là sau 1999-9-12

Sử dụng LocalDate.parse() (Java 8+)

Phương thức parse() của LocalDate chấp nhận String và trả về LocalDate.

import java.time.LocalDate;

public class Test {
    public static void main(String args[]) {
        String dateStr1 = "2007-11-25";
        String dateStr2 = "1999-9-12";

        LocalDate date1 = LocalDate.parse(dateStr1);
        LocalDate date2 = LocalDate.parse(dateStr1); // Lưu ý: bug trong code gốc, nên là dateStr2

        Boolean bool1 = date1.isAfter(date2);
        Boolean bool2 = date1.isBefore(date2);
        Boolean bool3 = date1.isEqual(date2);

        if (bool1) {
            System.out.println(dateStr1 + " là sau " + dateStr2);
        } else if (bool2) {
            System.out.println(dateStr1 + " là trước " + dateStr2);
        } else if (bool3) {
            System.out.println(dateStr1 + " bằng " + dateStr2);
        }
    }
}

Kết quả (đã sửa logic)

2007-11-25 là sau 1999-9-12