java回滚有一天

时间:2014-03-20 02:58:03

标签: java calendar

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

如果我使用Calendar.DAY_OF_MONTH而不是DAY_OF_YEAR,结果将是2014-01-31 00:00

有人有一个解决方案,有朝一日回滚也会回滚一年,例如,2014年改为2013年吗?

2 个答案:

答案 0 :(得分:3)

根据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)

答案 1 :(得分:0)

请尝试使用add方法。

c.add(Calendar.DAY_OF_YEAR, -1);