java.time
Вот современный ответ.
DateTimeFormatter sourceFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
DateTimeFormatter displayFormatter = DateTimeFormatter
.ofLocalizedDate(FormatStyle.SHORT)
.withLocale(Locale.forLanguageTag("zh-SG"));
String dateString = "31/05/2011";
LocalDate date = LocalDate.parse(dateString, sourceFormatter);
System.out.println(date.format(displayFormatter));
Вывод этого фрагмента:
31/05/11
Посмотрите, сможете ли вы жить с двузначным годом.Или используйте FormatStyle.MEDIUM
, чтобы получить 2011年5月31日
.Я рекомендую вам использовать встроенные форматы даты и времени в Java, когда это возможно.Это проще и очень хорошо подходит для интернационализации.
Если вам нужен точный формат, который вы указали, просто используйте исходный форматер в качестве форматера дисплея:
System.out.println(date.format(sourceFormatter));
31/05/ 2011
Рекомендую не использовать SimpleDateFormat
.Это общеизвестно хлопотно и давно устарело.Вместо этого я использую java.time, современный Java-интерфейс даты и времени.
Чтобы получить определенный формат, вам нужно отформатировать проанализированную дату обратно в строку.Ни у старомодного Date
, ни у современного LocalDate
не может быть формата.
Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее, как использоватьjava.time.