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

16 java calendar date

这是比较日期的有效方式:

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...               
}
Run Code Online (Sandbox Code Playgroud)

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

Chs*_*y76 20

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

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

if (someDate.compareTo(someCalendar1.getTime()) < 0) {
   ...Code...                           
}
Run Code Online (Sandbox Code Playgroud)

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

if (someDate.before(someCalendar1.getTime())) {
   ...Code...                           
}
Run Code Online (Sandbox Code Playgroud)

最后,如果你正在处理很多日期/时间,请考虑使用Joda Time而不是内置的java类.它更方便,更实用:

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


Jon*_*eet 7

这是有效的,但你有点困惑someDate- Calendar.setTime拿一个java.util.Date,这只是一个包装,long指示自1970年1月1日午夜UTC以来的毫秒数.它不是"格式为MM/dd/yyy" - 这是一个字符串表示,而不是java.util.Date.如果它碰巧以格式打印出来的东西MM/dd/yyyy,那正是Date.toString为你做的 - 它本身并不是格式的一部分.

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