2015-09-12 3 views
9

Java 8 DateTimeFormatterは、d. MMM uのようなパターンで作成された場合、TextStyle.SHORTで定義されたスタイルで書かれた月(たとえば13. Feb 2015)のみを解析でき、d. MMMM uから作成されたDateTimeFormatterは、 TextStyle.FULL(例:13. February 2015)です。その月のTextStyle.SHORTとTextStyle.FULLの両方で日付を解析することはできますか?

"古い" SimpleDateFormatでは、 "MMM"と "MMMM"の違いは、構文解析ではなく書式設定でのみ重要なので、FULL形式とSHORT形式の両方を理解するパーサーを簡単に作成できました。月の名前。

これを行うこともできるJava 8 DateTimeFormatterを作成することはできますか?あるいは、私は常にFULLとSHORTパターンの2つのパーサーを作成する必要がありますか?

答えて

6

あなたはパターンオプションの異なる月作ることができます:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d. [MMMM][MMM] u HH:mm:ss z", Locale.US); 

    ZonedDateTime zdt1 = ZonedDateTime.parse("4. Jan 2015 00:00:00 UTC", formatter); 
    ZonedDateTime zdt2 = ZonedDateTime.parse("4. January 2015 00:00:00 UTC", formatter); 

    System.out.println(zdt1); 
    System.out.println(zdt2); 

は出力:

2015-01-04T00:00Z[UTC] 
2015-01-04T00:00Z[UTC] 

このフォーマッタだけparse()のために使用することができるEDIT

、あなたが持っているだろうのために別のものを使用する。

+0

私が見るのは、「15月1月15日」のような「壊れた」文字列を解析できる唯一の欠点ですが、それは本当に大きな問題ではありません。 2つのフォーマッタ/パーサーを持つ方がより洗練されたソリューションではないかもしれないとしたらまだ未定です。 – David

+0

@David 2つだけ持っていれば、どちらのソリューションを選んでも問題ありません。しかし、より多くのタイプのフォーマットを解析する必要がある場合は、1つのパーサと1つのフォーマッタを選択する必要があります(オプションパーツをネストすることもできます)。 – Cinnam

関連する問題