Java有一天会回滚



在一个场景中,我想从当前时间回滚一天。当我使用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);

最新更新