在给定 JDK 8 DateTimeFormatter 的情况下获取原始模式字符串?
Get original pattern String given a JDK 8 DateTimeFormatter?
与我的问题 相关 - 如何在给定 DateTimeFormatter
的情况下获取原始 pattern
字符串?
问过on the mailing list回答是不可能,因为没有保留原来的模式
同一个线程建议使用 DateTimeFormatterBuilder
,它确实有信息。
这可能不是您问题的直接答案,但可能会有所帮助。
如果您知道格式化程序的构造参数,您可以调用静态方法:
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() );
结果(注意保留space/hyphen/slash/colon分隔符):
Test 1: ReducedValue(YearOfEra,2,2,2000-01-01)' 'Value(MonthOfYear,2)' 'Value(DayOfMonth,2)
Test 2: ReducedValue(YearOfEra,2,2,2000-01-01)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)
Test 3: ReducedValue(YearOfEra,2,2,2000-01-01)Value(MonthOfYear,2)Value(DayOfMonth,2)
Test 4: Value(MonthOfYear,2)'/'Value(DayOfMonth,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)
实施此方法需要研究 java.time.format.DateTimeFormatterBuilder
中的代码。 appendPattern(String pattern)
方法的 JavaDoc 似乎特别有用。如果您知道自己只使用几种类型的模式,您也许可以走一些捷径。
快速浏览 DateTimeFormatterBuilder
代码,依赖此类解决方案可能存在风险,因为 Value
、ReducedValue
、[=19 等字符串=], 等等可能会在未来的 Java 版本中更改,恕不另行通知。
与我的问题 DateTimeFormatter
的情况下获取原始 pattern
字符串?
问过on the mailing list回答是不可能,因为没有保留原来的模式
同一个线程建议使用 DateTimeFormatterBuilder
,它确实有信息。
这可能不是您问题的直接答案,但可能会有所帮助。
如果您知道格式化程序的构造参数,您可以调用静态方法:
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() );
结果(注意保留space/hyphen/slash/colon分隔符):
Test 1: ReducedValue(YearOfEra,2,2,2000-01-01)' 'Value(MonthOfYear,2)' 'Value(DayOfMonth,2)
Test 2: ReducedValue(YearOfEra,2,2,2000-01-01)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)
Test 3: ReducedValue(YearOfEra,2,2,2000-01-01)Value(MonthOfYear,2)Value(DayOfMonth,2)
Test 4: Value(MonthOfYear,2)'/'Value(DayOfMonth,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)
实施此方法需要研究 java.time.format.DateTimeFormatterBuilder
中的代码。 appendPattern(String pattern)
方法的 JavaDoc 似乎特别有用。如果您知道自己只使用几种类型的模式,您也许可以走一些捷径。
快速浏览 DateTimeFormatterBuilder
代码,依赖此类解决方案可能存在风险,因为 Value
、ReducedValue
、[=19 等字符串=], 等等可能会在未来的 Java 版本中更改,恕不另行通知。