java.time и ThreeTen Backport
Это работает на Java 7 (подробности ниже):
DateTimeFormatter jsonDateFormatter = DateTimeFormatter.ofPattern("uuuu-MMM-dd", Locale.ENGLISH);
DateTimeFormatter outputDateFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
String pDate = "2011-Jan-01";
LocalDate fDate = LocalDate.parse(pDate, jsonDateFormatter);
pDate = fDate.format(outputDateFormatter);
System.out.println("Formatted date: " + pDate);
Вывод из фрагмента:
Отформатировандата: 01-01-2011
Если у вас нет веских причин не делать этого, я рекомендую использовать один из встроенных форматов Java для локали вашего пользователя, а не жестко кодировать выходной формат. Например:
DateTimeFormatter outputDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(Locale.UK);
Теперь вывод:
Форматированная дата: 01-янв-2011
Вопрос: почему java.time?
Старые классы datetime, которые вы пытались использовать в этом вопросе, Date
и SimpleDateFormat
плохо разработаны, последние печально известны своими проблемами. К счастью, они также давно устарели. java.time, современный Java-интерфейс даты и времени, гораздо приятнее работать.
Вопрос: Могу ли я использовать java.time в Java 7? Как?
Да, java.time прекрасно работает на Java 7. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и более новых. Устройства Android (от уровня API 26) встроены в современный API.
- В не-Android Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылкивнизу).
- На более старых версиях Android используется Android-версия ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки