0

我想从今天(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 日,而是 2018 年 9 月 31 日

4

1 回答 1

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软件包,了解更多与日期、日历、时区等相关的课程。

于 2018-09-29T05:00:50.857 回答