Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 299
Asuwathaman R C Avatar asked Sep 06 '25 04:09

Asuwathaman R C


1 Answers

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)        
}
like image 104
Gabriele Mariotti Avatar answered Sep 07 '25 19:09

Gabriele Mariotti