Добавление дня к календарю в Android завершается с ошибкой 31-го
Предположим, что в настоящее время дата 28 мая. Если я вызываю следующие команды для того, чтобы вывод стал
cal.add(Calendar.DATE, 1); // Day = 29
cal.add(Calendar.DATE, 1); // Day = 30
cal.add(Calendar.DATE, 1); // Day = 31
cal.add(Calendar.DATE, 1); // Day = 31
cal.add(Calendar.DATE, -1); // Day = 29
Почему это не прыгает в следующем месяце? И почему он застревает на 31-м (но когда вы минус один, он прыгает на 29)?
Ответы
Ответ 1
Когда вы добавляете 1 в поле Calendar.DATE
, он должен также увеличивать месяц, когда достигается конец месяца (31 в случае с маем), так что вы не пишете, что имеет смысл. Отладьте его и убедитесь, что значение дня действительно соответствует вашим ожиданиям.
Ответ 2
Вы можете легко сделать это двумя простыми способами, мой друг. Первый:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 1);
а второй:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR_OF_DAY, 24);
Я думаю, вы хотели бы найти эту вещь.
Спасибо.
Ответ 3
Кажется, я ошибаюсь! в соответствии с api, roll обновляет только определенное поле!
если вы добавили дни в календарь, попробуйте
cal.roll(Calendar.DATE, 1);
это увеличит месяц и год при переполнении
Ответ 4
Какую реализацию Календаря вы используете? Потому что он работает для всех остальных...
Ответ 5
Я проверил, он добавляет успешно. Посмотрите мой код и о/р:
Calendar cal = Calendar.getInstance(); // today is 09-Aug-2012
for(int i=0;i<23;i++) {
cal.add(Calendar.DATE, 1);
}
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
О/р
1
Ответ 6
Это не ответ, просто подсказка: я обнаружил, что это происходит, когда DST начинается между датами. Возможно, это ваше дело...
Например: Brazillian DST начался в этом году на "Sun Oct 20 00:00:00 2013"
Calendar cal = Calendar.getInstance(); // today = Sat Oct 19 00:00:00 BRT 2013
cal.add(Calendar.DATE, 1); // = Sat Oct 19 23:00:00 BRT 2013
К сожалению, я до сих пор не знаю, как это сделать.
Ответ 7
Это также должно сделать трюк.
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, 1);
Вы можете протестировать его, используя:
for (int i = 0; i < 365; i++) {
cal.add(Calendar.DAY_OF_YEAR, 1);
System.out.println(cal.getTime().toString());
}