Cách để So sánh hai ngày trong Java

Trong bài viết này:Bằng phương thức compareToBằng phương thức equals, after và beforeBằng lớp calendarBằng phương thức getTimeTham khảo

Có nhiều cách để so sánh ngày (date) trong Java. Về bản chất, ngày đại diện cho một thời điểm (rất lâu) và được viết dưới dạng số phần nghìn giây đã trôi qua kể từ ngày 1/1/1970. Trong Java, Date là một đối tượng với nhiều phương thức so sánh. Bất kỳ phương thức nào so sánh hai ngày với nhau về bản chất chính là so sánh thời gian của ngày.

1
Bằng phương thức compareTo

  1. 1
    Sử dụng phương thức compareTo. Ngày là kế thừa có thể so sánh của <Date> và vì thế hai ngày có thể được so sánh trực tiếp bằng phương thức compareTo. Nếu các ngày này có cùng thời điểm thì phương thức sẽ trả về 0. Nếu ngày được so sánh có trước ngày còn lại thì sẽ trả về giá trị nhỏ hơn 0. Nếu ngày được so sánh có sau ngày còn lại, giá trị trả về sẽ lớn hơn 0. Nếu hai ngày bằng nhau, giá trị 0 sẽ được trả về. [1]
  2. 2
    Tạo đối tượng date. Bạn sẽ cần tạo từng đối tượng date trước khi bắt đầu so sánh chúng. Một trong những cách để thực hiện là sử dụng lớp SimpleDateFormat. Lớp này cho phép nhập giá trị ngày vào đối tượng date một cách dễ dàng.
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //Để khai báo những giá trị mới trong đối tượng date mới, hãy sử dụng cùng định dạng khi tạo ngày.
    Date date1 = sdf.parse("1995-02-23"); //date1 là 23/2/1995 
    Date date2 = sdf.parse("2001-10-31"); //date2 là 31/10/2001
    Date date3 = sdf.parse("1995-02-23"); //date3 là 23/2/1995
    
  • So sánh những đối tượng ngày. Mã dưới đây sẽ cho bạn thấy từng trường hợp: ít hơn, bằng và nhiều hơn.
      date1.compareTo(date2); //date1 < date2, trả về giá trị nhỏ hơn 0 
      date2.compareTo(date1); //date2 > date1, trả về giá trị lớn hơn 0
      date1.compareTo(date3); //date1 = date3, hiển thị giá trị 0
      
  • 2
    Bằng phương thức equals, after và before

    1. 1
      Sử dụng phương thức equals, after và before. Bạn có thể so sánh ngày bằng phương thức equals, after và before. Nếu hai ngày có cùng thời điểm, phương thức equals sẽ trả về giá trị true. Những ví dụ bên dưới sẽ sử dụng ngày đã tạo từ phương thức compareTo trước đó. [2]
    2. 2
      So sánh bằng phương thức before. Mã này có hai trường hợp: true và false. Nếu date1 có trước date2, before sẽ trả về giá trị true. Còn nếu không, before sẽ trả về là false.
      System.out.print(date1.before(date2)); //trả về giá trị true
      System.out.print(date2.before(date2)); //trả về giá trị false
      
  • So sánh bằng phương thức after. Mã này có hai trường hợp: true và false. Nếu date2 có sau date1, after sẽ trả về giá trị true. Còn nếu không thì after sẽ hiển thị giá trị false.
    • System.out.print(date2.after(date1));//trả về giá trị true
      System.out.print(date1.after(date2));//trả về giá trị false
      
  • So sánh bằng phương thức equals. Mã này có hai trường hợp: true và false. Nếu hai ngày này cùng thời điểm, equals sẽ trả về giá trị true. Còn nếu không thì equals sẽ phản hồi giá trị false.
      System.out.print(date1.equals(date3));//trả về giá trị true
      System.out.print(date1.equals(date2));//trả về giá trị false
      
  • 3
    Bằng lớp calendar

    1. 1
      Sử dụng lịch (calendar). Lớp calendar cũng có phương thức compareTo, equals, after và before, chúng hoạt động tương tự như lớp date phía trên. Vì vậy, nếu thông tin ngày nằm trong lịch thì bạn không cần trích xuất ngày chỉ để so sánh.[3]
    2. 2
      Tạo trường hợp trong Calendar. Để sử dụng những phương thức trong lịch, bạn sẽ cần một số trường hợp Calendar. May mắn là bạn chỉ cần lấy thời gian từ những trường hợp Date được tạo sẵn.
      Calendar cal1 = Calendar.getInstance(); //biểu thị là cal1
      Calendar cal2 = Calendar.getInstance(); //biểu thị là cal2
      Calendar cal3 = Calendar.getInstance(); //biểu thị là cal3
      cal1.setTime(date1); //áp dụng ngày vào cal1
      cal2.setTime(date2);
      cal3.setTime(date3);
      
  • So sánh cal1 và cal2 bằng phương thức before. Mã bên dưới sẽ trả về giá trị true vì cal1 có trước cal2.
    • System.out.print(cal1.before(cal2)); //trả về giá trị true
      
  • So sánh cal1 và cal2 bằng phương thức after. Mã bên dưới sẽ trả về giá trị false vì cal1 có trước cal2.
    • System.out.print(cal1.after(cal2)); //trả về giá trị false
      
  • So sánh cal1 và cal2 bằng phương thức equals. Mã bên dưới sẽ hiển thị ví dụ của cả hai trường hợp true và false. Điều kiện còn tùy vào trường hợp lịch được so sánh. Mã này sẽ trả về giá trị "true", rồi đến "false" ở dòng tiếp theo.
    • System.out.println(cal1.equals(cal3)); //trả về giá trị true: cal1 == cal3
      System.out.print(cal1.equals(cal2)); //trả về giá trị false: cal1 != cal2
      

    4
    Bằng phương thức getTime

    1. 1
      Sử dụng phương thức getTime. Phương thức này cũng có thể so sánh trực tiếp thời điểm của hai ngày, tuy nhiên những phương pháp bên trên dễ đọc và được ưa chuộng hơn. Đây là phép so sánh giữa hai loại dữ liệu nguyên thủy, vì thế có thể trả về kết quả dấu "<", ">" và "==".
    2. 2
      Tạo đối tượng long time. Trước khi tiến hành so sánh ngày, bạn cần tạo số nguyên dài kiểu long lấy dữ liệu từ những đối tượng Date đã tạo trước đó. May mắn là phương thức getTime() sẽ thực hiện gần như toàn bộ thao tác cho bạn.
        long time1 = getTime(date1); //biểu thị time1 nguyên thủy từ date1
        long time2 = getTime(date2); //biểu thị time2 nguyên thủy từ date2
        
    3. 3
      Thực hiện phép so sánh bé hơn. Sử dụng dấu bé hơn (<) để so sánh hai giá trị số nguyên vừa rồi. Bởi vì time1 có trước time 2 nên kết quả đầu tiên sẽ hiển thị. Statement còn lại sẽ được bao gồm cho cú pháp thích hợp.
        if(time1 < time2){
        System.out.println("date1 is before date2"); //kết quả này sẽ hiển thị bởi vì time1 <time2
        }
        else{
        System.out.println("date1 is not before date2");
        }
        
    4. 4
      Áp dụng phép so sánh lớn hơn. Sử dụng dấu lớn hơn (>) để so sánh hai giá trị số nguyên trên. Bởi vì time1 lâu hơn time 2 nên kết quả đầu tiên sẽ được trả về. Statement còn lại sẽ được bao gồm cho cú pháp thích hợp.
        if(time2 > time1){
        System.out.println("date2 is after date1"); //kết quả này sẽ hiển thị vì time2 > time1 
        }
        else{
        System.out.println("date2 is not after date1");
        }
        
    5. 5
      Thực hiện phép so sánh bằng. Sử dụng dấu kiểm tra đẳng thức (==) để so sánh xem hai giá trị số nguyên trên có bằng nhau hay không. Bởi vì time1 bằng với time3 nên kết quả đầu tiên sẽ được trả về. Nếu chương trình nhận về statement khác thì nghĩa là các thời gian không bằng nhau.[4]
      if(time1 == time2){
      System.out.println("the dates are equal");
      }
      else{
      System.out.println("the dates are not equal"); //kết quả này sẽ hiển thị vì time1 != time2
      }
      

    Thông tin Bài viết

    wikiHow là một trang "wiki", nghĩa là nhiều bài viết ở đây là nội dung của nhiều tác giả cùng viết nên. Để tạo ra bài viết này, các tác giả tình nguyện đã thực hiện chỉnh sửa và cải thiện bài viết theo thời gian.

    Chuyên mục: Phần mềm

    Ngôn ngữ khác:

    English: Compare Two Dates in Java, Deutsch: In Java zwei Daten vergleichen, Español: comparar dos fechas en Java, Français: comparer deux dates en Java, Bahasa Indonesia: Membandingkan Dua Buah Tanggal dalam Java, Português: Comparar Duas Datas em Java, Italiano: Eseguire il Confronto fra Date in Java, Nederlands: Datums vergelijken in Java, 中文: 在Java中比较两个日期

    Trang này đã được đọc 721 lần.
    Bài viết này đã giúp ích cho bạn?