Конвертация строки с датой
В локальной базе данных приложения android хранится время в таком формате строки: Wed, 12 Feb 2020 8:52:39 GMT. Мне нужно вывести в формате: 12.02.2020 8:52:39, чтобы время/дата зависeли от часового пояса, выставленного в настройках системы. Подскажите как правильно конвертировать, пожалуйста.
После всех проб, ошибок и помощи я всё-же смог сделать конвертацию.
SimpleDateFormat df = new SimpleDateFormat( "EEE, dd MMM yyyy H:mm:ss zzz", Locale.US);
try {
Date date = df.parse("Wed, 12 Feb 2020 12:52:39 GMT");
SimpleDateFormat dfout = new SimpleDateFormat( "dd.MM.yyyy H:mm:ss");
String res = dfout.format(date);
viewHolder.txtDATE.setText(res);
} catch (ParseException e) {
e.printStackTrace();
}
Ответы (2 шт):
Момент первый: лучше не хранить дату с использованием текста. Храните в виде "YYYY-MM-DD HH:mm:ss" или вообще unixtime-ом. Это правда удобней, и в базе можно запросы с фильтрацией по дате делать, и парсить проще. Конкретно в вашем случае должно сработать что-то такое:
ZonedDateTime.parse("Wed, 12 Feb 2020 8:52:39 GMT").format(DateTimeFormatter.ofPattern( "d MM YYYY HH:mm:ss"))
Или переведем в Data
SimpleDateFormat df = new SimpleDateFormat( "E, dd MMM YYYY HH:mm:ss z");
Date date = df.parse("Wed, 12 Feb 2020 8:52:39 GMT");
SimpleDateFormat dfout = new SimpleDateFormat( "d MM YYYY HH:mm:ss");
String res = dfout.format(date);
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseSensitive()
.appendPattern("EEE, dd MMM yyyy H:mm:ss zzz")
.toFormatter();
DateTimeFormatter toFormat = new DateTimeFormatterBuilder()
.parseCaseSensitive()
.appendPattern("dd.MM.yyyy H:mm:ss")
.toFormatter();
ZonedDateTime time = LocalDateTime.parse("Wed, 12 Feb 2020 8:52:39 GMT", formatter)
.atZone(ZoneId.systemDefault());
String format = time.format(toFormat);
System.out.println(format);
У DateTimeFormatter очень хорошая документация советую "пройтись" по-нему . В этом коде мы просто получаем LocalDateTime от нашей даты а потом ZonedDateTime добавляя зону, которая настроен в системе. Ну а в конце просто формат в строку в том паттерне который вам нужен.