web-dev-qa-db-ja.com

JDK 8 DateTimeFormatterを指定して元のパターン文字列を取得しますか?

私の質問に関連して ここ -patternを指定して元のDateTimeFormatter文字列を取得するにはどうすればよいですか?

22
pathikrit

メーリングリストで と聞かれましたが、元のパターンが保持されていないため、不可能であるという答えが返ってきました。

同じスレッドは、情報を持っているDateTimeFormatterBuilderを使用することを提案しています。

14
assylias

単純で洗練されたソリューションではありませんが、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コードをざっと見てみると、ValueReducedValueFractionなどの文字列が将来予告なしに変更される可能性があるため、このタイプのソリューションに依存するリスクがありますJavaバージョン。

2
GoldDragonTSU

それはあなたの質問に対する直接の答えではないかもしれませんが、それは役立つかもしれません。

フォーマッターがどのように構築されたかのパラメーターがわかっている場合は、静的メソッドを呼び出すことができます。

DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle dateStyle, FormatStyle timeStyle, Chronology chrono, Locale locale)

これにより、パターンが文字列として表示されます。

2
Jaap Geurts