Có nhiều cách khác nhau để so sánh ngày tháng trong Java. Trong nội bộ, ngày được biểu thị dưới dạng thời điểm (dài) - số mili giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970. Trong Java, Ngày là một đối tượng, có nghĩa là nó bao gồm nhiều phương thức để so sánh. Bất kỳ phương pháp so sánh hai ngày về cơ bản sẽ so sánh thời gian của các ngày.
Các bước
Phương pháp 1/4: Sử dụng CompareTo
Bước 1. Sử dụng CompareTo
Ngày thực hiện Có thể so sánh và vì vậy hai ngày có thể được so sánh trực tiếp với phương thức CompareTo. Nếu các ngày ở cùng một thời điểm, phương thức trả về giá trị không. Nếu ngày được so sánh nằm trước đối số ngày, giá trị nhỏ hơn 0 sẽ được trả về. Nếu ngày được so sánh nằm sau đối số ngày, giá trị lớn hơn 0 sẽ được trả về. Nếu các ngày bằng nhau, giá trị 0 được trả về.
Bước 2. Tạo các đối tượng ngày tháng
Bạn sẽ cần tạo từng đối tượng ngày tháng trước khi có thể bắt đầu so sánh chúng. Một cách để làm điều này là sử dụng lớp SimpleDateFormat. Nó cho phép dễ dàng nhập các giá trị ngày tháng vào các đối tượng ngày tháng.
SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd"); // Để khai báo giá trị trong các đối tượng ngày tháng mới. sử dụng cùng một định dạng ngày khi tạo ngày. Date date1 = sdf.parse ("1995-02-23"); // date1 là ngày 23 tháng 2 năm 1995 Ngày date2 = sdf.parse ("2001-10-31"); // date2 là ngày 31 tháng 10 năm 2001 Ngày date3 = sdf.parse ("1995-02-23"); // date3 là ngày 23 tháng 2 năm 1995
Bước 3. So sánh các đối tượng ngày tháng
Đoạn mã dưới đây sẽ hiển thị cho bạn từng trường hợp - nhỏ hơn, bằng và lớn hơn.
date1.compareTo (date2); // date1 <date2, trả về nhỏ hơn 0 date2.compareTo (date1); // date2> date1, trả về lớn hơn 0 date1.compareTo (date3); // date1 = date3, vì vậy sẽ in 0 ra bảng điều khiển
Phương pháp 2/4: Sử dụng Bằng, Sau và Trước
Bước 1. Sử dụng bằng, sau và trước
Ngày có thể được so sánh với các phương pháp bằng, sau và trước. Nếu hai ngày ở cùng một thời điểm, phương thức bằng sẽ trả về true. Các ví dụ sẽ sử dụng các ngày đã tạo trước đó từ phương thức CompareTo.
Bước 2. So sánh bằng phương pháp trước
Đoạn mã dưới đây hiển thị một trường hợp đúng và sai. Nếu date1 trước date2, trước đó trả về true. Nếu không, trước khi trả về false.
System.out.print (date1.before (date2)); // in true System.out.print (date2.before (date2)); // in sai
Bước 3. So sánh bằng cách sử dụng phương pháp sau
Đoạn mã dưới đây hiển thị một trường hợp đúng và sai. Nếu date2 sau date1, sau khi trả về true. Nếu không, sau khi trả về false.
System.out.print (date2. After (date1)); // in true System.out.print (date1. After (date2)); // in false
Bước 4. So sánh bằng phương pháp bằng
Đoạn mã dưới đây cho thấy một trường hợp đúng và sai. Nếu các ngày bằng nhau, giá trị bằng trả về true. Nếu không, giá trị bằng trả về false.
System.out.print (date1.equals (date3)); // in đúng System.out.print (date1.equals (date2)); // in sai
Phương pháp 3/4: Sử dụng Lớp lịch
Bước 1. Sử dụng lịch
Lớp lịch cũng có các phương thức CompareTo, equals, after và before hoạt động theo cách tương tự như đã mô tả ở trên cho lớp ngày. Vì vậy, nếu thông tin ngày đang được lưu trong lịch, thì không cần phải trích xuất ngày chỉ để thực hiện so sánh.
Bước 2. Tạo các phiên bản của Lịch
Để sử dụng các phương pháp Lịch, bạn sẽ cần một vài phiên bản Lịch. May mắn thay, bạn có thể nắm bắt thời gian từ các phiên bản Ngày đã được tạo.
Lịch cal1 = Calendar.getInstance (); // khai báo cal1 Lịch cal2 = Calendar.getInstance (); // khai báo cal2 Lịch cal3 = Calendar.getInstance (); // khai báo cal3 cal1.setTime (date1); // áp dụng ngày tháng cho cal1 cal2.setTime (date2); cal3.setTime (date3);
Bước 3. So sánh cal1 và cal2 sử dụng trước đây
Đoạn mã dưới đây sẽ in true vì cal1 trước cal2.
System.out.print (cal1.before (cal2)); // sẽ in true
Bước 4. So sánh cal1 và cal2 bằng cách sử dụng sau
Đoạn mã dưới đây sẽ in sai vì cal1 trước cal2.
System.out.print (cal1. after (cal2)); // in sai
Bước 5. So sánh cal1 và cal2 bằng cách sử dụng các dấu bằng
Đoạn mã dưới đây sẽ hiển thị một ví dụ về cả trường hợp đúng và sai. Điều kiện phụ thuộc vào các trường hợp lịch được so sánh. Mã phải in "true", sau đó "false" trên dòng tiếp theo.
System.out.println (cal1.equals (cal3)); // in ra true: cal1 == cal3 System.out.print (cal1.equals (cal2)); // in sai: cal1! = cal2
Phương pháp 4/4: Sử dụng getTime
Bước 1. Sử dụng getTime
Cũng có thể so sánh trực tiếp thời điểm của hai ngày, mặc dù bất kỳ cách tiếp cận nào trước đây có thể dễ đọc hơn và thích hợp hơn. Đây sẽ là sự so sánh của hai kiểu dữ liệu nguyên thủy, vì vậy nó có thể được thực hiện với "" và "==".
Bước 2. Tạo các đối tượng thời gian dài
Trước khi bạn có thể so sánh các ngày, bạn phải tạo các số nguyên dài với dữ liệu từ các đối tượng Ngày đã tạo trước đó. May mắn thay, phương thức getTime () sẽ thực hiện hầu hết công việc cho bạn.
long time1 = getTime (date1); // khai báo time1 nguyên thủy từ date1 long time2 = getTime (date2); // khai báo time2 nguyên thủy từ date2
Bước 3. Làm một phép so sánh nhỏ hơn
Sử dụng ký hiệu nhỏ hơn (<) để so sánh hai giá trị số nguyên này. Vì thời gian 1 ít hơn thời gian 2, nên thông báo đầu tiên sẽ được in. Câu lệnh else được bao gồm cho cú pháp thích hợp.
if (time1 <time2) {System.out.println ("date1 trước date2"); // sẽ in kể từ time1 <time2} else {System.out.println ("date1 không trước date2"); }
Bước 4. Thực hiện một phép so sánh lớn hơn
Sử dụng ký hiệu lớn hơn (>) để so sánh hai giá trị số nguyên này. Vì thời gian 1 lớn hơn thời gian 2, nên thông báo đầu tiên sẽ được in. Câu lệnh else được bao gồm cho cú pháp thích hợp.
if (time2> time1) {System.out.println ("date2 sau date1"); // sẽ in kể từ time2> time1} else {System.out.println ("date2 không sau date1"); }
Bước 5. Thực hiện một phép so sánh bằng
Sử dụng biểu tượng để kiểm tra sự bằng nhau (==) để so sánh hai giá trị số nguyên này có bằng nhau không. Vì time1 bằng time3 nên thông báo đầu tiên sẽ được in ra. Nếu chương trình nhận được câu lệnh else, điều đó có nghĩa là thời gian không bằng nhau.
if (time1 == time2) {System.out.println ("các ngày bằng nhau"); } else {System.out.println ("các ngày không bằng nhau"); // sẽ in kể từ time1! = time2}