对于您选择使用的旧 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
如果您可以使用更新的 Android 上可用的更新的 JSR 310 API,那么它会更好,并且该解决方案将是(假设您想使用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
软件包,了解更多与日期、日历、时区等相关的课程。