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

java中日期与当前日期的差异,java,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 yea

我正在用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日(一个月前一天)作为输出。

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

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

请注意,日历中的月份从0开始,所以四月是3,您不需要任何手动操作,日历将自动执行所有必要的日期运算,只需执行此操作即可

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

请注意,日历中的月份从0开始,所以四月是3,这是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年)

这是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年)

您必须使用日历还是可以接受使用JodaTime?请尝试
cal.add(Calendar.DAY\u of\u MONTH,-1)这个问题以前已经得到了回答:我建议您使用Joda library。您必须使用Calendar还是可以接受使用JodaTime?请尝试
cal.add(Calendar.DAY\u OF u MONTH,-1)
这一点以前已经得到了回答:我建议Joda library会晕眩。
Calendar cal=new GregoriaCalendar();cal.add(Calendar.DATE,-1);System.out.println(“年”+cal.get(日历年));System.out.println(“月”+cal.get(日历月));System.out.println(“Day”+cal.get(日历月日))这是我得到的输出<代码>2013年第3个月第15天我在测试中添加了输出,现在是2013年4月15日,明白了,3是4月,日历中从0开始的月份<代码>日历cal=new Gregoriacalendar();cal.add(Calendar.DATE,-1);System.out.println(“年”+cal.get(日历年));System.out.println(“月”+cal.get(日历月));System.out.println(“Day”+cal.get(日历月日))这是我得到的输出
2013年第3个月第15天
我在测试中添加了输出,现在是2013年4月15日,明白了,3是4月,从日历中的0开始算起