Пользователь выбирает дату в 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й вариант (парсить значения из строки вручную).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть 20 кнопок на панелиКак добавить к этой панели ползунок что бы я мог выбрать кнопку?
Нужно узнать тип для переменной со значениями вроде Program123, String я так понимаю не подходит
Нужно чтобы при выборе в ListBox элемента,Button придавала значение переменной "n",как у названия элемента в Listbox Или сам Click по элементу придавал...
ПриветУ меня возникла необходимость использовать DbContext в миграциях