What I am trying to do is I am having a List values for different dates in milliseconds and I need to enable those dates in Android MaterialDatePicker.
I am not sure what is happening but when those dates are enabled inside the DatePicker it adds one more day
For example, I want to enable Nov27, 2023 so in DatePicker it enables Nov28, 2023
likewise for Nov28, 2023 it enables Nov29, 2023 I tried matching timezones for matching dates but it's still not working for me.
Below is my code
val customDateValidator = object : CalendarConstraints.DateValidator {
override fun describeContents(): Int {
return 0
}
override fun writeToParcel(dest: Parcel, flags: Int) {}
override fun isValid(date: Long): Boolean {
dateList?.forEach { item ->
val itemDateTime = Calendar.getInstance().apply {
timeZone = TimeZone.getTimeZone("UTC") // Set a consistent time zone
timeInMillis = date?.toLong() ?: 0L
}
val dateDateTime = Calendar.getInstance().apply {
timeZone = TimeZone.getTimeZone("UTC") // Set a consistent time zone
timeInMillis = date
}
if (itemDateTime.get(Calendar.YEAR) == dateDateTime.get(Calendar.YEAR) &&
itemDateTime.get(Calendar.MONTH) == dateDateTime.get(Calendar.MONTH) &&
itemDateTime.get(Calendar.DAY_OF_MONTH) == dateDateTime.get(Calendar.DAY_OF_MONTH)) {
return true
}
}
return false
}
}
val constraintsBuilder = CalendarConstraints.Builder().apply {
// other constraints
setValidator(customDateValidator)
}
val datePicker = MaterialDatePicker.Builder.datePicker()
.setTitleText("Select date")
.setTheme(R.style.Widget_AppTheme_MaterialDatePicker)
.setSelection(selectedDate)
.setInputMode(MaterialDatePicker.INPUT_MODE_CALENDAR)
.setCalendarConstraints(constraintsBuilder.build())
.build()
datePicker.addOnPositiveButtonClickListener {
//Do something
}
datePicker.show(parentFragmentManager, "tag")
For example below are two milliseconds I am using for that
1701241200000 and 1701154800000
I tried both values with the website Millisec to Date Converter and it's returning Nov 27, 2023 & Nov 28, 2023