Для более старого 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
для большего количества классов, которые работают с датами, календарями, часовыми поясами и т. д.