Добавление дня в календарь на Android завершится неудачно

Предположим, что в настоящее время 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.

Solutions Collecting From Web of "Добавление дня в календарь на Android завершится неудачно"

Когда вы добавляете 1 в поле Calendar.DATE, он должен также увеличивать месяц, когда достигнут конец месяца (31 в случае мая), чтобы вы написали, не имеет смысла. Отлаживайте его и убедитесь, что значение дня действительно соответствует тому, что вы думаете

Вы можете легко сделать это двумя простыми способами, мой друг. Первый:

 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, 1); 

А второй:

 Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, 24); 

Я думаю, вы хотели бы найти эту вещь. Благодарю.

Кажется, я ошибаюсь! В соответствии с api, roll только обновляет специальное поле!

Если вы добавляете дни в календарь, попробуйте

 cal.roll(Calendar.DATE, 1); 

Это увеличит месяц и год при переполнении

Какую реализацию Календаря вы используете? Потому что это работает для всех остальных …

Я проверил, он добавляет успешно. Посмотрите мой код и о / р:

 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

Это не ответ, просто подсказка: я обнаружил, что это происходит, когда 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 

К сожалению, я до сих пор не знаю, как это решить.

Это также должно сделать трюк.

 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()); }