这不是一个简单或优雅的解决方案,但使用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 )':'值(SecondOfMinute,2)
实施这种方法需要研究java.time.format.DateTimeFormatterBuilder 中的代码。 appendPattern(String pattern) 方法的JavaDoc 似乎特别有用。如果您知道您只使用几种类型的模式,您也许可以走一些捷径。
快速浏览DateTimeFormatterBuilder 代码,可能存在依赖此类解决方案的风险,因为Value、ReducedValue、Fraction 等字符串可能会在不另行通知的情况下更改未来的 Java 版本。