Có nhiều Phương pháp 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 (dài) 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.
những bước
Phương pháp số 1 Bằng phương thức compareTo
1dù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 những 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ì giá trị nhỏ hơn 0 sẽ được trả về. 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ề. 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 Phương pháp thực hiện là 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. SimpleDateFormatsdf=newSimpleDateFormat(“yyyy-MM-dd”);//Để khai báo những giá trị mới trong đối tượng date mới, hãy dùng cùng định dạng khi tạo ngày.Datedate1=sdf.parse(“1995-02-23”);//date1 là 23/2/1995 Datedate2=sdf.parse(“2001-10-31”);//date2 là 31/10/2001Datedate3=sdf.parse(“1995-02-23”);//date3 là 23/2/19953 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 0date1.compareTo(date3);//date1 = date3, hiển thị giá trị 0
Phương pháp số 2 Bằng phương thức equals, after và before
1dù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ẽ dùng ngày đã tạo từ phương thức compareTo trước đó. 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ị trueSystem.out.print(date2.before(date2));//trả về giá trị false3 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ị trueSystem.out.print(date1.after(date2));//trả về giá trị false4 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ị trueSystem.out.print(date1.equals(date2));//trả về giá trị false
Phương pháp số 3 Bằng lớp calendar
1dù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 được mô tả ở 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.2 Tạo trường hợp trong Calendar. Để dùng những phương thức trong lịch, bạn sẽ cần một vài 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. Calendarcal1=Calendar.getInstance();//biểu thị là cal1Calendarcal2=Calendar.getInstance();//biểu thị là cal2Calendarcal3=Calendar.getInstance();//biểu thị là cal3cal1.setTime(date1);//áp dụng ngày vào cal1cal2.setTime(date2);cal3.setTime(date3);3 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ị true4 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ị false5 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 == cal3System.out.print(cal1.equals(cal2));//trả về giá trị false: cal1 != cal2
Phương pháp số 4 Bằng phương thức getTime
1dù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 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. longtime1=getTime(date1);//biểu thị time1 nguyên thủy từ date1longtime2=getTime(date2);//biểu thị time2 nguyên thủy từ date23 Thực hiện phép so sánh bé hơn. 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 Áp dụng phép so sánh lớn hơn. dùng dấu lớn hơn (>) để so sánh hai giá trị số nguyên trên. Bởi vì time1 lớn 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”);}5Thực hiện phép so sánh bằng. 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à những thời gian không bằng nhau.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}