私の要件は、日付文字列が、指定された有効なフォーマットのセットに基づいて正しいフォーマットであることを検証することです。Java 8 DateTimeFormatterBuilder()。appendOptional not working
有効な形式:
MM/dd/yy
MM/dd/yyyy
私は複数のオプションのフォーマットをサポートする柔軟なフォーマッタを作成するためのJava 8 DateTimeFormatterBuilderを使用して、簡単な試験方法を作成しました。ここでは、コードです:私はこれを実行すると
public static void test() {
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yy"))
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yyyy"))
.toFormatter();
String dateString = "10/30/2017";
try {
LocalDate.parse(dateString, formatter);
System.out.println(dateString + " has a valid date format");
} catch (Exception e) {
System.out.println(dateString + " has an invalid date format");
}
}
、ここで出力されているが、
10/30/2017 has an invalid date format
あなたがコードで見たよう、有効な日付フォーマットであるMM/DD/YYとMM/DD/yyyy。 私は、10/30/2017の日付がMM/dd/yyyyと一致するので有効であると予想しました。ただし、2011年10月30日は無効と報告されています。
何が問題になりますか?なぜこれは機能しないのですか?
私も
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yy"))
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yyyy"))
の代わりに
を試してみましたが、それでも同じ問題がありました。
予想通りこのコードは、私が使用している場合に実行されます。
String dateString = "10/30/17";
String dateString = "10/30/2017";
の代わりに、私はここで間違って起こっている2つの質問
がありますか?なぜ「10/30/2010」では機能しないのですか?
Java 8を使用すると、柔軟な日付フォーマッタ(複数のオプションの書式をサポートするフォーマッタ)を正しく作成する方法はありますか?私はパターン文字列自体にオプションのセクションを作成するために[]を使用することを知っています。私は、フォーマッタは、あなたが期待するように動作しません。私は(パターン文字列内の[]を回避し、それぞれ別々のフォーマット文字列のために別のオプション句を使用して)しようとしていたものと類似のもの
'appendOptionalは()'(以下私の答えを参照してください)を使用することを想定されていない方法:ここではイラストです。日付の形式を変えるには、代わりにフォーマッタのリストを作成するのが最も簡単な方法ですが、これが最善の方法であるかどうかはわかりません。 –