1

我正在用 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,但我得到 15/03/2013(一个月前一天)作为输出。

4

2 回答 2

5

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

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

请注意,日历中的月份从 0 开始,所以四月是 3

于 2013-04-16T13:50:40.993 回答
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)

于 2013-04-16T14:21:06.167 回答