Получить исходный шаблон String с учетом JDK 8 DateTimeFormatter?

В связи с моим вопросом here - как получить исходную строку pattern, указанную в DateTimeFormatter?

Ответы

Ответ 1

В списке рассылки было задано

Ответ 2

Это может быть не прямой ответ на ваш вопрос, но он может помочь.

Если вы знаете параметры того, как был построен форматировщик, вы можете вызвать статический метод:

DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle dateStyle, FormatStyle timeStyle, Chronology chrono, Locale locale)

Это даст вам шаблон в виде строки.

Ответ 3

Не простое или изящное решение, но используя результаты метода DateTimeFormatter .toString(), возможно, вы сможете свернуть свой собственный код, который анализирует полученную String и восстанавливает исходный шаблон.

Некоторый код, который выводит несколько результатов .toString() для различных паттернов:

java.time.format.DateTimeFormatter variousFormatPatterns =
    java.time.format.DateTimeFormatter.ofPattern("yy MM dd");
System.out.println("Test 1: " + variousFormatPatterns.toString() );

variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yy-MM-dd");
System.out.println("\nTest 2: " + variousFormatPatterns.toString() );

variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yyMMdd");
System.out.println("\nTest 3: " + variousFormatPatterns.toString() );

variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
System.out.println("\nTest 4: " + variousFormatPatterns.toString() );

Результаты (обратите внимание на сохранение символов пробела/дефис/слэш/двоеточие):

Тест 1: ReducedValue (YearOfEra, 2,2,2000-01-01) '' Значение (MonthOfYear, 2) '' Значение (DayOfMonth, 2)

Тест 2: ReducedValue (YearOfEra, 2,2,2000-01-01) '-' Значение (MonthOfYear, 2) '-' Value (DayOfMonth, 2)

Тест 3: ReducedValue (YearOfEra, 2,2,2000-01-01) Значение (MonthOfYear, 2) Значение (DayOfMonth, 2)

Test 4: Value (MonthOfYear, 2) '/' Value (DayOfMonth, 2) '/' Value (YearOfEra, 4,19, EXCEEDS_PAD) '' Value (HourOfDay, 2) ':' Value (MinuteOfHour, 2 ) ':' Значение (SecondOfMinute, 2)

Реализация этого подхода потребует изучения кода в java.time.format.DateTimeFormatterBuilder. JavaDoc для метода appendPattern(String pattern) представляется особенно полезным. Возможно, вы сможете сделать несколько ярлыков, если знаете, что работаете с несколькими типами шаблонов.

Взяв быстрый взгляд на код DateTimeFormatterBuilder, скорее всего, будет риск, связанный с этим типом решения, поскольку строки, такие как Value, ReducedValue, Fraction и т.д., могут быть изменены без предварительного уведомления в будущие версии Java.