为什么 calendar.add() return 31/9/2018
Why calendar.add() return 31/9/2018
我想从今天 (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)
但是当我 Log() 它时,日期不是 1/10/2018,而是 31/9/2018
对于您选择使用的旧 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
软件包的更多信息 类,它可以处理日期、日历、时区等。
我想从今天 (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)
但是当我 Log() 它时,日期不是 1/10/2018,而是 31/9/2018
对于您选择使用的旧 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
软件包的更多信息 类,它可以处理日期、日历、时区等。