Почему calendar.add() возвращают 31/9/2018
Я хочу добавить 2 дня с сегодняшнего дня (29/9/2018), я использую:
val calendar = Calendar.getInstance()!!
calendar.set(CalendarDay.today().year, CalendarDay.today().month+1, CalendarDay.today().day)
calendar.add(Calendar.DAY_OF_MONTH, 2)
Но когда я вхожу (), дата не 1/10/2018, это 31/9/2018
1 ответ
Для более старого API, который вы выбрали для использования, вы можете упростить это до:
val today = Calendar.getInstance() // 2018-09-29
today.add(Calendar.DAY_OF_MONTH, 2); // 2018-10-01
println(SimpleDateFormat().format(today.getTime())) // 2018-10-01
Там нет необходимости устанавливать Calendar
экземпляр, который уже содержит текущую дату.
Ваш вывод, я думаю, возможно, вы неправильно прочитали или есть некоторая странная ошибка в реализации Android, потому что этот код:
val today = Calendar.getInstance() // 2018-09-29
// totally unneccessary:
today.set(today.get(Calendar.YEAR),
today.get(Calendar.MONTH),
today.get(Calendar.DAY_OF_MONTH)) // 2018-09-29
today.add(Calendar.DAY_OF_MONTH, 2); // 2018-10-01
println(SimpleDateFormat().format(today.getTime())) // 2018-10-01
Работает нормально, хотя и имеет ненужный шаг (устанавливая в качестве даты, которая уже есть). И если вы добавите один к месяцу, как вы делали раньше, вы создадите неправильную дату:
val today = Calendar.getInstance() // 2018-09-29
// unnecessary and wrong:
today.set(today.get(Calendar.YEAR),
today.get(Calendar.MONTH)+1,
today.get(Calendar.DAY_OF_MONTH)) // 2018-10-29
today.add(Calendar.DAY_OF_MONTH, 2); // 2018-10-31
println(SimpleDateFormat().format(today.getTime())) // 2018-10-31
Если вы можете использовать более новые API JSR 310, которые доступны на более новом Android, то это лучше, и это решение будет (если вы хотите использовать LocalDate
):
val today = LocalDate.now() // 2018-09-29
val inTwoDays = today.plusDays(2) // 2018-10-01
println(DateTimeFormatter.ISO_DATE.format(inTwoDays)) // 2018-10-01
Пожалуйста, прочитайте о java.time
пакет для большего количества классов, которые работают с датами, календарями, часовыми поясами и многим другим.