与java中当前日期的日期差异

时间:2013-04-16 13:44:10

标签: java

我正在开发JAVA swing中的应用程序,因为我希望与当前日期的日期差异,如果今天是16/04/2013那么它应该返回15/04/2013。我尝试了以下代码:

Calendar cal = new GregorianCalendar();
Calendar cal2 = new GregorianCalendar();
cal.roll(Calendar.DAY_OF_YEAR, -1);
//if within the first 30 days, need to roll the year as well
if(cal.after(cal2)){
     cal.roll(Calendar.YEAR, -1);
}
System.out.println("Year " + cal.get(Calendar.YEAR));
System.out.println("Month " + cal.get(Calendar.MONTH));
System.out.println("Day " + cal.get(Calendar.DAY_OF_MONTH));

在这段代码中我期待有一天回来。但相反,我得到了一个月的约会。 防爆。如果今天是16/04/2013,则预期输出为15/04/2013,但我将在2013年3月15日(一天后的一个月)作为输出。

2 个答案:

答案 0 :(得分:5)

您不需要任何手动操作,Calendar会自动执行所有必要的日期算术,只需执行此操作

    Calendar cal = new GregorianCalendar();
    cal.add(Calendar.DATE, -1);

请注意,“日历”中的月份从0开始,因此4月份为3

答案 1 :(得分:2)

这是java.util.Date实现糟糕的经典示例:月份计数从零开始:

0-> January
1-> February
2-> March
3-> April.

你的意思是:

new Date(10,1,2013) //10th of January of 2013

得到的结果:3983年2月10日(1970年+ 2013年)