为什么在Kotlin中使用DatePickerDialog时,月份比选择的值小一?

问题描述 投票:0回答:1

我正在使用 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。

java android kotlin date simpledateformat
1个回答
0
投票

如果你看官方文档https://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener

month 值从 0 到 11 所以这是正常的

据说兼容java.util.Calendar,可能你用的是不兼容的日历

© www.soinside.com 2019 - 2024. All rights reserved.