Нет, извините. Я не знаю ни одной библиотеки Java, которая бы автоматически превращала "MMM d"
в 20 sep.
для локали, которая предпочитает день месяца перед сокращением месяца.
Вы можете попробовать изменить ответ по Rowi следующим образом:
DateTimeFormatter ft =
DateTimeFormatter
.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(Locale.forLanguageTag("sv-SE"))
;
Однако результат:
20 сентября 2019
Включает год, который вы не просили.
Расширенное решение будет использовать класс DateTimeFormatterBuilder
для создания DateTimeFormatter
объектов.
DateTimeFormatterBuilder
.getLocalizedDateTimePattern(
FormatStyle.MEDIUM,
null,
IsoChronology.INSTANCE,
Locale.forLanguageTag("sv-SE")
)
Возвращает d MMM y
. Измените эту строку, чтобы удалить y
и пробел перед ней. Обратите внимание, что на других языках y
может быть yy
, yyyy
или u
и не может быть последним в строке. Передайте измененную строку шаблона формата в DateTimeFormatter.ofPattern
.
Это может быть шатким. Даже если вы посмотрите строки шаблона формата для всех доступных языковых стандартов, следующая версия CLDR (откуда поступают строки) может все же содержать сюрприз. Но я думаю, что это лучшее, что мы можем сделать. Если бы это был я, я бы посоветовал вызвать исключение, если смогу обнаружить, что строка из getLocalizedDateTimePattern
не похожа на строку, которую я знаю, как изменить.