我想从今天(29/9/2018)开始增加2天,我使用:
val calendar = Calendar.getInstance()!!
calendar.set(CalendarDay.today().year, CalendarDay.today().month+1, CalendarDay.today().day)
calendar.add(Calendar.DAY_OF_MONTH, 2)
但是当我登录()时,日期不是2018年1月10日,则是31/9/2018
答案 0 :(得分:3)
对于您选择使用的较旧的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
软件包的信息,以了解更多适用于日期,日历,时区等的类。