我应该使用 Calendar.compareTo() 来比较日期吗?

2022-09-03 05:10:07

这是比较日期的有效方法吗:

Calendar someCalendar1 = Calendar.getInstance(); // current date/time
someCalendar1.add(Calendar.DATE, -14);

Calendar someCalendar2 = Calendar.getInstance();
someCalendar2.setTime(someDate); // someDate is in the format of MM/dd/yyyy

if(someCalendar2.compareTo(someCalendar1) < 0){
   ...Code...               
}

...还是有更好的方法?


答案 1

Date 实现了可比较本身,因此没有理由将其包装到日历中:

Calendar someCalendar1 = Calendar.getInstance(); // current date/time
someCalendar1.add(Calendar.DATE, -14);

if (someDate.compareTo(someCalendar1.getTime()) < 0) {
   ...Code...                           
}

Date还具有方便的after()before()方法,使上述比较更易于阅读:

if (someDate.before(someCalendar1.getTime())) {
   ...Code...                           
}

最后,如果你经常处理日期/时间,请考虑使用Joda Time而不是内置的java类。它更加方便和实用:

DateTime dt = new DateTime().minusWeeks(2);
if (new DateTime(someDate).isBefore(dt)) {
   ...Code...                           
}

答案 2

它是有效的,但你有点困惑 - 采取一个,它只是一个包装器,表示自1970年1月1日午夜,UTC以来的毫秒数。它不是“以MM / dd / yyy格式” - 这是一个字符串表示形式,而不是.如果它碰巧以格式打印出一些东西,那只是为你做的 - 它本身并不是格式的一部分。someDateCalendar.setTimejava.util.Datelongjava.util.DateMM/dd/yyyyDate.toString

顺便说一句,我个人建议你避免并完全使用Joda Time。这是一个更好的API。java.util.Datejava.util.Calendar