How to compare two dates in java?

I am trying to compare two dates together, and I want to compare only the date, not part of the time, this is how I store the date in my program:

Thu Jan 27 23:20:00 GMT 2011 

I have:

 ArrayList<Date> dateList; 

and i want to use

 dateList.compares(newDate); // if the answer was false which means I // have new date then add the newdate to my list 

but since part time is involved, I cannot get the correct answer. How can I fix my problem?

I do not want to use JODA-TIME

+4
source share
4 answers

You can compare value by value similar to this

 d1.getDate().equals(d2.getDate()) && d1.getYear().equals(d2.getYear()) && d1.getMonth().equals(d2.getMonth()) 

or

 Date date1 = new Date(d1.getYear(), d1.getMonth(), d1.getDate()); Date date2 = new Date(d2.getYear(), d2.getMonth(), d2.getDate()); date1.compareTo(date2); 

If you work with the Date class, use the Calendar class instead. Here is the most elegant solution using Calendar and Comparator to do this

 public class CalendarDateWithoutTimeComparator implements Comparator<Calendar> { public int compare(Calendar cal1, Calendar cal2) { if(cal1.get(Calendar.YEAR) != cal2.get(Calendar.YEAR)) { return cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR); } else if (cal1.get(Calendar.MONTH) != cal2.get(Calendar.MONTH)) { return cal1.get(Calendar.MONTH) - cal2.get(Calendar.MONTH); } return cal1.get(Calendar.DAY_OF_MONTH) - cal2.get(Calendar.DAY_OF_MONTH); } } 

Using:

 Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); // these calendars are equal CalendarDateWithoutTimeComparator comparator = new CalendarDateWithoutTimeComparator(); System.out.println(comparator.compare(c1, c2)); List<Calendar> list = new ArrayList<Calendar>(); list.add(c1); list.add(c2); Collections.sort(list, comparator); 
+3
source

Why aren't you using compareTo ()?

 int java.util.Date#compareTo(Date anotherDate) 
+2
source
 Date check_in = new Date(2010,7,31); Date check_out = new Date(2011,5,22); int result = check_out.compareTo(check_in); if(result<0) { // check_out < check_in } else if(result>0) { // check_out > check_in } else { // check_out == check_in } 
0
source

You can use this

 int compareDates(Calendar c1, Calendar c2) { if(c1.get(Calendar.YEAR) != c2.get(Calendar.YEAR)){ return c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR); } else if(c1.get(Calendar.MONTH) != c2.get(Calendar.MONTH)){ return c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH); } return (c1.get(Calendar.DAY_OF_MONTH) - c2.get(Calendar.DAY_OF_MONTH)); } 

EDIT:

Time in Joda or not, this SO post has all the answers for comparing dates

How to compare two dates without a time part?

0
source

Source: https://habr.com/ru/post/1384474/


All Articles