SimpleDateFormat не правит дату по заданному шаблону

382
04 сентября 2017, 05:03

Пользователь выбирает дату в 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()));
Answer 1

Нет никакой ошибки.

Введённая дата - 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й вариант (парсить значения из строки вручную).

READ ALSO
Как добавить JScrollPane к JPanel?

Как добавить JScrollPane к JPanel?

Есть 20 кнопок на панелиКак добавить к этой панели ползунок что бы я мог выбрать кнопку?

393
Тип переменной для названия [требует правки]

Тип переменной для названия [требует правки]

Нужно узнать тип для переменной со значениями вроде Program123, String я так понимаю не подходит

404
ListBox и Button соединение [требует правки]

ListBox и Button соединение [требует правки]

Нужно чтобы при выборе в ListBox элемента,Button придавала значение переменной "n",как у названия элемента в Listbox Или сам Click по элементу придавал...

455
Как использовать DbCobtext в миграциях?

Как использовать DbCobtext в миграциях?

ПриветУ меня возникла необходимость использовать DbContext в миграциях

430