Получить исходный шаблон String с учетом JDK 8 DateTimeFormatter?
В связи с моим вопросом here - как получить исходную строку pattern
, указанную в DateTimeFormatter
?
Ответы
Ответ 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.