Enable Specific Dates in Material Date Picker

86 views Asked by At

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

0

There are 0 answers