私の質問に関連して ここ -pattern
を指定して元のDateTimeFormatter
文字列を取得するにはどうすればよいですか?
メーリングリストで と聞かれましたが、元のパターンが保持されていないため、不可能であるという答えが返ってきました。
同じスレッドは、情報を持っているDateTimeFormatterBuilder
を使用することを提案しています。
単純で洗練されたソリューションではありませんが、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) ': 'Value(SecondOfMinute、2)
このアプローチを実装するには、_Java.time.format.DateTimeFormatterBuilder
_のコードを調べる必要があります。 appendPattern(String pattern)
メソッドのJavaDocは特に便利なようです。数種類のパターンのみを使用していることがわかっている場合は、いくつかのショートカットを使用できる可能性があります。
DateTimeFormatterBuilder
コードをざっと見てみると、Value
、ReducedValue
、Fraction
などの文字列が将来予告なしに変更される可能性があるため、このタイプのソリューションに依存するリスクがありますJavaバージョン。
それはあなたの質問に対する直接の答えではないかもしれませんが、それは役立つかもしれません。
フォーマッターがどのように構築されたかのパラメーターがわかっている場合は、静的メソッドを呼び出すことができます。
DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle dateStyle, FormatStyle timeStyle, Chronology chrono, Locale locale)
これにより、パターンが文字列として表示されます。