如何在 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")
请告诉我怎样才能得到想要的结果?
谢谢。
您可以使用 LocalDate
和 of
函数。
此处示例:
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-dd
到 LocalDate
。这就是为什么它会崩溃,因为根据该格式,您的日期无效。
您必须提供 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
之前格式化它,我们可以使用 String
的 format
方法来 return 像这样的 2 位数 "%02d".format(intValue)
改变
val startDay = ("$day-$month-$year")
至
val startDay = "${"%02d".format(day)}-${"%02d".format(month)}-$year"
我的应用程序中有一个工作日期选择器,用于在日期选择后替换 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")
请告诉我怎样才能得到想要的结果?
谢谢。
您可以使用 LocalDate
和 of
函数。
此处示例:
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 ofval 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-dd
到 LocalDate
。这就是为什么它会崩溃,因为根据该格式,您的日期无效。
您必须提供 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
之前格式化它,我们可以使用 String
的 format
方法来 return 像这样的 2 位数 "%02d".format(intValue)
改变
val startDay = ("$day-$month-$year")
至
val startDay = "${"%02d".format(day)}-${"%02d".format(month)}-$year"