как использовать DateTimeFormatter.ofPattern (“EEEE, MMMM d”, locale) для преобразования в формат даты?

#java

#java

Вопрос:

Например:

 DateTimeFormatter dtfr = DateTimeFormatter.ofPattern("EEEE, MMMM d", locale);
return dtfr.format(localDate);
  

Результат (локаль — Германия):

 Expected :Samstag, 28. Mai
Actual   :Samstag, Mai 28
  

Если я использую

 DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
return dtf
            .withLocale(locale)
            .format(localDate1);
  

Результат:

 Expected :Samstag, 28. Mai
Actual   :Samstag, 28. Mai 2016
  

Я не могу просто избавиться от года, потому что на другом языке может быть другое слово для описания года.

Итак, как я могу использовать DateTimeFormatter(не SimpleDateFormat), чтобы заставить его работать?

Ответ №1:

Изменить порядок переданных параметров.

"EEEE, MMMM d" сделает.. Samstag, Mai 28

Попробуйте использовать:

"EEEE, d MMMM" даст вам.. Samstag, 28 Mai

Вы можете найти все необходимые шаблоны в Java API: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#Patterns

Комментарии:

1. но США и другие страны имеют другой формат. Итак, я хочу сделать формат на основе локали. Итак, версия для США — «EEEE, MMMM d», а версия для Германии — «EEEE, d MMMM»

2. @Alex Это недоступно. Только полный локализованный формат вкл. доступен год.

3. @Andreas так ты имеешь в виду, что я могу получить только этот результат: Samstag, 28. Mai 2016 с годом. Как я могу избавиться от года, используя FormatStyle.FULL. Спасибо

4. Ваш вопрос противоречив … вы просите FormatStyle. ПОЛНОГО, но минус год…

5. @JoshMiller Потому что я думаю, что это единственный способ сделать формат правильным, но мне не нужен год, чтобы быть там.