这可能不是您问题的直接答案,但可能会有所帮助。
如果您知道格式化程序的构造参数,您可以调用静态方法:
DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle dateStyle, FormatStyle timeStyle, Chronology chrono, Locale locale)
这将为您提供字符串形式的模式。
这不是一个简单或优雅的解决方案,但使用
DateTimeFormatter
的 .toString()
方法的结果,也许可以推出您自己的代码来解析结果字符串并重建原始模式。
一些代码可以打印各种模式的一些
.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)' 'Value(MonthOfYear,2)' 'Value(DayOfMonth,2)
测试 2:ReducedValue(YearOfEra,2,2,2000-01-01)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)
测试 3:ReducedValue(YearOfEra,2,2,2000-01-01)Value(MonthOfYear,2)Value(DayOfMonth,2)
测试 4: Value(MonthOfYear,2)'/'Value(DayOfMonth,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)' :'值(秒数,2)
实现这种方法需要研究
java.time.format.DateTimeFormatterBuilder
中的代码。 appendPattern(String pattern)
方法的 JavaDoc 似乎特别有用。如果您知道自己只使用几种类型的模式,您也许可以采取一些捷径。
快速浏览一下
DateTimeFormatterBuilder
代码,依赖这种类型的解决方案可能存在风险,因为诸如 Value
、ReducedValue
、Fraction
等字符串可能会在未来的 Java 中更改,恕不另行通知版本。