获取原始模式字符串给定JDK 8 DateTimeFormatter?
与我的问题相关 – 如何获得给定DateTimeFormatter
的原始pattern
字符串?
它已在邮件列表中被询问,答案是不可能,因为原始模式不会被保留。
同一个线程建议使用具有该信息的DateTimeFormatterBuilder
。
这不是一个简单或优雅的解决方案,但使用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)”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)值(MonthOfYear,2)Value(DayOfMonth,2)
测试4:值(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
代码,可能存在依赖此类解决方案的风险,因为在未来的Java版本中,诸如Value
, ReducedValue
, Fraction
等字符串可能会在没有通知的情况下发生变化。
它可能不是您问题的直接答案,但可能有所帮助。
如果您知道格式化程序的构造方式,可以调用静态方法:
DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle dateStyle, FormatStyle timeStyle, Chronology chrono, Locale locale)
这将为您提供一个字符串模式。