откат назад

1

В сценарии я хочу вернуться назад в текущее время. Он отлично работает, когда я использую функцию 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 год?

Теги:
calendar

2 ответа

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)
  • 0
    спасибо, это работает сейчас!
0

Вместо этого попробуйте использовать метод add.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню