Search code examples
javaandroiddatepickerandroid-datepickermaterial-components-android

Android Material Date Picker Date Format


I'm using material date picker in my app to select dates. Below is my code.

MaterialDatePicker.Builder builder = MaterialDatePicker.Builder.datePicker();
    builder.setSelection(Calendar.getInstance().getTimeInMillis());
    builder.setTitleText(getString(R.string.selectDate));
    final MaterialDatePicker materialDatePicker = builder.build();

    btn_pickDate(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            materialDatePicker.show(getSupportFragmentManager(),"DATE_PICKER");
        }
    });
    
    materialDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener() {
        @Override
        public void onPositiveButtonClick(Object selection) {
            startDate.setText(materialDatePicker.getHeaderText());
        }
    });

when I select a date, the date is returned in dd MMM yyyy in device one and MMM dd, yyyy in device two.

I need the date to be returned in same format (Ex: dd MMM yyyy) across all devices. How to achieve this in material date picker.


Solution

  • The addOnPositiveButtonClickListener listener returns the selected date as Long value. In this way you have a long value and not a String.

    You can use:

        MaterialDatePicker<Long> materialDatePicker = builder.build();
        
        materialDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() {
            @Override
            public void onPositiveButtonClick(Long selection) {
               //....
               Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
               calendar.setTimeInMillis(selection);
               SimpleDateFormat format = new SimpleDateFormat("yyyy MM dd");
               String formattedDate  = format.format(calendar.getTime());
            }
        });
    

    In kotlin:

    materialDatePicker.addOnPositiveButtonClickListener {
        val utc = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
        utc.timeInMillis = it
        val format = SimpleDateFormat("yyyy-MM-dd")
        val formatted: String = format.format(utc.time)        
    }