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