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.
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)
}