Пользователь выбирает дату в DatePicker, после чего она записывается в TextInputEditText в формате "число.месяц.год". После заполнения остальной необходимой информации, всё заносится в БД. Вот только SimpleDateFormat не задаёт указанный формат.
SimpleDateFormat sdf = new SimpleDateFormat("dd.M.yyyy", Locale.US);
Date date;
try {
date = sdf.parse(tilPurchaseDate.getEditText().getText().toString());
} catch (ParseException e) {
Toast.makeText(context, "Некорректная дата. Установлено текущее время", Toast.LENGTH_SHORT).show();
date = new Date(System.currentTimeMillis());
}
Введённая дата - 1.9.2017
Дата из SimpleDateFormat - Fri Sep 01 00:00:00 EDT 2017 Почему так происходит?
UPD: Решено
В адаптере RV заменил
tvPurchaseDate.setText(String.valueOf(purchaseModel.getPurchaseDate()));
на
tvPurchaseDate.setText(new SimpleDateFormat("dd.MM.yyyy", Locale.US).format(purchaseModel.getPurchaseDate()));
Нет никакой ошибки.
Введённая дата - 1.9.2017
Дата из SimpleDateFormat - Fri Sep 01 00:00:00 EDT 2017
Все верно: 1.9.2017 и Fri Sep 01 00:00:00 EDT 2017 - это одна и та же дата.
SimpleDateFormat успешно распарсил входную строку 1.9.2017 и вернул объект Date в переменную date. То что вы видите в дебаггере как Fri Sep 01 00:00:00 EDT 2017 это результат вывода date.toString() и это никак не связано с форматом входной строки - само значение даты в date хранится не как строка.
При работе с БД (сохранения/получении даты) вы используете класс Date, а формат отображения устанавливаете в компоненте.
Если компонент принимает в качестве значения Date, LocalDate и пр. значения-даты, то нужно передавать значение, считанное из БД, а формат устанавливать в компоненте. Если компонент принимает значение как строку, то сперва форматируете в нужный формат, а затем передаете в компонент, и соответственно, в обратную сторону - парсите строку в дату, а затем сохраняете в БД.
В вашем случае:
после чего она записывается в TextInputEditText в формате "число.месяц.год". После заполнения остальной необходимой информации, всё заносится в БД
вы используете текстовое поле ввода - поэтому придется использовать 2й вариант (парсить значения из строки вручную).
Сборка персонального компьютера от Artline: умный выбор для современных пользователей