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