如何在 android Kotlin 中将月份 Int 添加到日期选择器上的选定日期?

How can I add months Int to a choosen date on date picker in android Kotlin?

我的应用程序中有一个工作日期选择器,用于在日期选择后替换 EditText。我想通过 RadioGroup 按钮添加持续时间,该按钮打印 Int 以引发结束日期。我怎样才能做到这一点?我过去两天都没有得到我想要的结果。

这是我目前所知道的。


    val datePicker = findViewById<DatePicker>(R.id.date_Picker)
            val today = Calendar.getInstance()
            datePicker.init(
                today.get(Calendar.YEAR),
                today.get(Calendar.MONTH),
                today.get(Calendar.DAY_OF_MONTH
            ) { view, year, month, day ->
                val month = month + 1
    
                val startDay = ("$day-$month-$year")
    
                binding.fechadeinicio.text = fechainicio

                val duration = when (binding.duracion.checkedRadioButtonId) {
                            R.id.doce -> 12
                            R.id.veinticuatro -> 24
                            R.id.treintayseis -> 36
                            else -> 36
                        }
    
                  //  val endDate = startDate.plusMonths(Duration.toLong())
                 //   binding.endDate.text = endDate.toString()
               }

这是最接近我想要的结果的一个。然而,我想使用选定的日期 val startDay,而不是 val date = LocalDate.parse("2020-05-03")。当我替换它时,应用程序崩溃了。


    val date = LocalDate.parse("2020-05-03")
    // Displaying date
    println("Date : $date")
    // Add 2 months to the date
    val newDate = date.plusMonths(2)
    println("New Date : $newDate")

请告诉我怎样才能得到想要的结果?

谢谢。

您可以使用 LocalDateof 函数。

此处示例:

    val date = LocalDate.of(year, month, day)
    // Displaying date
    println("Date : $date")
    // Add 2 months to the date
    val newDate = date.plusMonths(2)
    println("New Date : $newDate")

I want to use the selected date that is val startDay instead of val date = LocalDate.parse("2020-05-03"). When I replace it, the app crashes.

val startDay = ("$day-$month-$year") 这里你创建的日期为 dd-MM-yyyy,但默认情况下 LocalDate.parse 使用 DateTimeFormatter.ISO_LOCAL_DATE 来解析字符串,即解析格式为 yyyy-MM-ddLocalDate。这就是为什么它会崩溃,因为根据该格式,您的日期无效。

您必须提供 DateTimeFormatter 模式 dd-MM-yyyy 来解析您的日期。

你可以这样做

val startDay = ("$day-$month-$year")
val dateFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
binding.fechadeinicio.text = fechainicio

val duration = when (binding.duracion.checkedRadioButtonId) {
    R.id.doce -> 12
    R.id.veinticuatro -> 24
    R.id.treintayseis -> 36
    else -> 36
}

val startDate = LocalDate.parse(startDay, dateFormatter)
val endDate = startDate.plusMonths(duration.toLong()).format(dateFormatter)
binding.endDate.text = endDate

DatePicker returns 年月日 int 值,现在创建像 val startDay = ("$day-$month-$year") 这样的日期将导致小于 10 的天数和月数为一位数,这将 return 1 Jan 2020 作为 1-1-2020 但日期格式化程序期望它是 01-01-2020.

为了解决这个问题,我们必须在将 int 值赋值给 startDay 之前格式化它,我们可以使用 Stringformat 方法来 return 像这样的 2 位数 "%02d".format(intValue)

改变

val startDay = ("$day-$month-$year")

val startDay = "${"%02d".format(day)}-${"%02d".format(month)}-$year"