我正在开发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日(一天后的一个月)作为输出。
答案 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年)