在一个场景中,我想从当前时间回滚一天。当我使用Calendar.roll()函数时,它工作得很好,但是当涉及到2014-1-1 00:00时,它似乎是一个意想不到的结果。下面是代码:
Calendar c = Calendar.getInstance();
try {
c.setTimeInMillis(sdf.parse("2014-1-1 00:00").getTime());
} catch (ParseException e) {
e.printStackTrace();
}
c.roll(Calendar.DAY_OF_YEAR, -1);
c1.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
System.out.println (sdf.format (c1.getTime ())),
结果为:2014-12-31 00:00
如果我使用日历。DAY_OF_MONTH而不是DAY_OF_YEAR,结果将是2014-01-31 00:00
当回滚一天也回滚一年时,有人有解决方案吗?例如,将2014年更改为2013年?
按照javadocs http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
Roll rule. Larger fields are unchanged after the call.
所以使用
c.add(Calendar.DAY_OF_YEAR, -1)
尝试使用add方法。
c.add(Calendar.DAY_OF_YEAR, -1);