java.time, ThreeTenABP и встроенный локализованный формат
DateTimeFormatter formatter
= DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
.withLocale(Locale.US);
String startDate = "2019-02-18T06:30:38.9933333"; // Input String
LocalDateTime dateTime = LocalDateTime.parse(startDate);
System.out.println(dateTime.format(formatter));
Вывод:
2/18/19 6:30 AM
Еще лучше, чем выше, получить LocalDateTime
из вашей базы данных, или, если это пока невозможно, тогда Timestamp
, который вы конвертируете следующим образом:
LocalDateTime dateTime = DateTimeUtils.toLocalDateTime(timestampFromDatabase);
Или, если используете Java8 или позднее:
LocalDateTime dateTime = timestampFromDatabase.toLocalDateTime();
Форматирование такое же, как и раньше.
Как правило, Java знает лучший формат для конкретной аудитории лучше, чем вы.Использование встроенного формата также избавляет вас от подверженной ошибкам задачи написания строки шаблона формата.
В первом фрагменте я использую тот факт, что ваша входная строка соответствует ISO 8601, международному стандартному формату.что классы java.time анализируют (и также печатают) как значения по умолчанию, то есть без какого-либо явного средства форматирования.
Классы SimpleDateFormat
, java.util.Date
и java.sql.Date
все плохо разработаны и давно устарели,Вместо этого я использую java.time, современный API даты и времени Java.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых и более новых Androidустройства.Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от уровня API 26) современный API поставляется встроенным.
- В Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старых) Android используется версия ThreeTen для AndroidBackport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки