我正在使用 Kotlin 开发一个 Android 应用程序,我正在使用 DatePickerDialog 允许用户选择日期。但是,我注意到当用户选择月份时,传递给 OnDateSetListener 回调的值比实际选择的值小 1。
例如,如果我选择日期 15/December/2022,回调将接收 selectedMonth 作为 11 而不是 12。同样,如果我选择 3/January/2023,回调将接收 selectedMonth 作为 12 而不是1. 二月份是 1.
这是我正在使用的相关代码:
fun pickDate() {
val cal = Calendar.getInstance()
val year = cal.get(Calendar.YEAR)
val month = cal.get(Calendar.MONTH)
val day = cal.get(Calendar.DAY_OF_MONTH)
DatePickerDialog(this,
DatePickerDialog.OnDateSetListener { view, selectedYear, selectedMonth, selectedDay ->
val selectedDate = "$selectedDay/$selectedMonth/$selectedYear"
val sdf = SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH)
val formattedDate = sdf.format(sdf.parse(selectedDate))
dateText?.text = formattedDate.toString()
},
year,
month,
day
).show()
}
如您所见,我使用传递给回调的 selectedDay、selectedMonth 和 selectedYear 值将选定日期格式化为字符串。但是,由于 selectedMonth 值比实际选择的值小 1,因此结果字符串不正确。
谁能解释为什么会这样,我该如何解决才能使显示的日期正确? 在此先感谢您的帮助
我从一些网站得到一些答案,这里的月份从 0 开始。确实一月应该是 0 而不是 12。
如果你看官方文档https://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener
month 值从 0 到 11 所以这是正常的
据说兼容java.util.Calendar,可能你用的是不兼容的日历