它是比较日期的有效方法:
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...
}
...或者是有没有更好的方法吗?
日期实现可比本身,因此没有理由将它包装成日历:
Calendar someCalendar1 = Calendar.getInstance(); // current date/time
someCalendar1.add(Calendar.DATE, -14);
if (someDate.compareTo(someCalendar1.getTime()) < 0) {
...Code...
}
日期也有方便后()和()之前 ,使上面的对比更容易阅读的方法:
if (someDate.before(someCalendar1.getTime())) {
...Code...
}
最后,如果你使用的日期/时间处理了很多,也可以考虑使用约达时间 ,而不是内置的Java类。 它更方便,功能:
DateTime dt = new DateTime().minusWeeks(2);
if (new DateTime(someDate).isBefore(dt)) {
...Code...
}
它是有效的,但你稍微困惑someDate
- Calendar.setTime
需要java.util.Date
,这仅仅是围绕着一个包装long
,因为午夜1970年1月1日,UTC毫秒的指示数。 这不是“格式MM / DD / YYY” -这是一个字符串表示,而不是一个java.util.Date
。 如果碰巧打印出来的东西,格式为MM/dd/yyyy
,这正是Date.toString
为你做的-这不是格式的固有部分。
顺便说一句,我个人建议您避免java.util.Date
和java.util.Calendar
完全和使用约达时间代替。 这是一个更好的 API。
至于为什么乔达是更好的一个例子,拿夏令时。
如果你测量“一天”为1000 * 60 * 60 * 24毫秒,日期库 - 和日历库 - 既忘了有一天在今年25个小时,而另一个与23你会偶尔螺丝高达日期计算,如果你仅仅依靠内建在J2SE API的Java类。
乔达是成功的一半可能是直接替代GregorianCalendar的,日历和日期在Java中的未来版本。
没关系。 您也可以前()和()后使用:
package demo.so;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Tester {
public static void main(String[] args) throws Exception {
Calendar someCalendar1 = Calendar.getInstance(); // current date/time
someCalendar1.add(Calendar.DATE, -11);
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Date someDate = df.parse("10/08/2009");
Calendar someCalendar2 = Calendar.getInstance();
someCalendar2.setTime(someDate);
String cal1 = df.format(someCalendar1.getTime());
String cal2 = df.format(someCalendar2.getTime());
if (someCalendar1.equals(someCalendar2))
System.out.println( cal1 + " is the same as " + cal2);
if (someCalendar1.after(someCalendar2))
System.out.println(cal1 + " is after " + cal2);
if (someCalendar1.before(someCalendar2))
System.out.println(cal1 + " is before " + cal2);
}
}
但是,你不应该使用日期,已被废弃,烦恼的日期处理的来源。 建立自己的包装GregorianCalendar的,或使用一些好的库,如乔达。