如何在 Kotlin 的 DatePickerDialog 中创建日期分隔符?
How to make a date delimiter in DatePickerDialog in Kotlin?
我有一个 DatePickerDialog 绑定到的 EditText。我正在努力使 DatePickerDialog 的日期约束不早于今天和年份。我在 Java 中找到了几个如何执行此操作的示例,并尝试了不同的编写方式,但没有任何效果:应用程序崩溃或无法正常工作。你能帮我设置 DatePickerDialog 的日期限制吗?
NewItemActivity.kt
class NewItemActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new_item)
val editDate = findViewById<EditText>(R.id.editDate)
editDate.setOnClickListener {
showDateDialog(editDate)
}
}
private fun showDateDialog(editDate: EditText?) {
val calendar: Calendar = Calendar.getInstance()
val dateSetListener =
OnDateSetListener { _, year, month, dayOfMonth ->
calendar[Calendar.YEAR] = year
calendar[Calendar.MONTH] = month
calendar[Calendar.DAY_OF_MONTH] = dayOfMonth
val simpleDateFormat = SimpleDateFormat("dd-MM-yyyy")
editDate?.setText(simpleDateFormat.format(calendar.time))
}
DatePickerDialog(
this@NewItemActivity,
dateSetListener,
calendar[Calendar.YEAR],
calendar[Calendar.MONTH],
calendar[Calendar.DAY_OF_MONTH]).show()
}
}
你可以在过去的日期试试这个
datePickerDialog.getDatePicker().setMaxDate(cal.getTimeInMillis())
以及未来的日期
datePickerDialog.getDatePicker().setMinDate(cal.getTimeInMillis())
fun openDatePickerDialog() {
// Get Current Date
val cal: Calendar = Calendar.getInstance()
val datePickerDialog = DatePickerDialog(this@EditPostActivity,
{ view, year, monthOfYear, dayOfMonth ->
val selectedDate: String =
dayOfMonth.toString() + "-" + (monthOfYear + 1) + "-" + year
binding.etDate.setText(selectedDate)
}, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)
)
datePickerDialog.getDatePicker().setMaxDate(cal.getTimeInMillis())
datePickerDialog.show()
}
你可以用这个来改变你的约会对象:
fun convertDateToFormat(
date: String?,
format_date: String?,
format_return: String?
): String? {
var dt = Date()
try {
val sdf = SimpleDateFormat(format_date, Locale.ENGLISH)
dt = sdf.parse(date)
} catch (e: Exception) {
e.printStackTrace()
}
return DateFormat.format(format_return, dt).toString()
}
Calendar today = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
selectedDateStr = sdf.format(today.getTime());
String currentDate = Global.Companion.convertDateToFormat(selectedDateStr, "yyyy-MM-dd", "dd-MM-yyyy");
editText.setText(currentDate);
我有一个 DatePickerDialog 绑定到的 EditText。我正在努力使 DatePickerDialog 的日期约束不早于今天和年份。我在 Java 中找到了几个如何执行此操作的示例,并尝试了不同的编写方式,但没有任何效果:应用程序崩溃或无法正常工作。你能帮我设置 DatePickerDialog 的日期限制吗?
NewItemActivity.kt
class NewItemActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new_item)
val editDate = findViewById<EditText>(R.id.editDate)
editDate.setOnClickListener {
showDateDialog(editDate)
}
}
private fun showDateDialog(editDate: EditText?) {
val calendar: Calendar = Calendar.getInstance()
val dateSetListener =
OnDateSetListener { _, year, month, dayOfMonth ->
calendar[Calendar.YEAR] = year
calendar[Calendar.MONTH] = month
calendar[Calendar.DAY_OF_MONTH] = dayOfMonth
val simpleDateFormat = SimpleDateFormat("dd-MM-yyyy")
editDate?.setText(simpleDateFormat.format(calendar.time))
}
DatePickerDialog(
this@NewItemActivity,
dateSetListener,
calendar[Calendar.YEAR],
calendar[Calendar.MONTH],
calendar[Calendar.DAY_OF_MONTH]).show()
}
}
你可以在过去的日期试试这个
datePickerDialog.getDatePicker().setMaxDate(cal.getTimeInMillis())
以及未来的日期
datePickerDialog.getDatePicker().setMinDate(cal.getTimeInMillis())
fun openDatePickerDialog() {
// Get Current Date
val cal: Calendar = Calendar.getInstance()
val datePickerDialog = DatePickerDialog(this@EditPostActivity,
{ view, year, monthOfYear, dayOfMonth ->
val selectedDate: String =
dayOfMonth.toString() + "-" + (monthOfYear + 1) + "-" + year
binding.etDate.setText(selectedDate)
}, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)
)
datePickerDialog.getDatePicker().setMaxDate(cal.getTimeInMillis())
datePickerDialog.show()
}
你可以用这个来改变你的约会对象:
fun convertDateToFormat(
date: String?,
format_date: String?,
format_return: String?
): String? {
var dt = Date()
try {
val sdf = SimpleDateFormat(format_date, Locale.ENGLISH)
dt = sdf.parse(date)
} catch (e: Exception) {
e.printStackTrace()
}
return DateFormat.format(format_return, dt).toString()
}
Calendar today = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
selectedDateStr = sdf.format(today.getTime());
String currentDate = Global.Companion.convertDateToFormat(selectedDateStr, "yyyy-MM-dd", "dd-MM-yyyy");
editText.setText(currentDate);