を使用SimpleDateFormat.parse(String)
するには、形式で指定されたすべてのフィールドが入力文字列に存在する必要があります。私が望むのは、部分的な入力文字列を同じ形式に対して検証する方法です。
たとえば、Format="yyyy/MM/dd HH:mm:ss"
andInput="2012/01/01"
は一致する必要があり、時刻はゼロに設定する必要があります。
これを行う方法はありますか?現在、SimpleDateFormat
例外をスローします。
DateUtils#parseDate(String, String[])
ApacheUtilsから試してみてください。それはあなたが許可されたフォーマットの配列を渡すことを可能にし、何かが収まるまでそれぞれを試します。
SimpleDateFormat
それぞれが異なる日付形式を持つ2つの異なるオブジェクトを使用し、最初のオブジェクトを使用します。解析例外がスローされた場合は、もう一方を使用してください。
最善の解決策IMHOは、最初に正規表現を使用して文字列をチェックし、使用する解析形式を把握することです。Calendar
また、文字列を少なくとも2回(1つは正規表現で、2つ目は)解析するのではなく、正規表現でグループ化を使用して、自分で日付を作成する(たとえば、を使用する)こともできますDateFormat
。
m0skit0 によって提案されたソリューションを実装する方法を次に示します。複数SimpleDateFormat
を使用すると、try catch で解析をカスケードできます。
SimpleDateFormat fullFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
SimpleDateFormat shortFormat = new SimpleDateFormat("yyyy/MM/dd");
String input="2012/01/01";
Date res;
try {
res = fullFormat.parse(input);
} catch (ParseException e) {
res = shortFormat.parse(input);
}