MM-dd 形式の文字列を Java 日付に解析したいと思います。年が指定されていないため、解析された日付は現在の年でなければなりません。有効な日付文字列のみを解析する必要があるため、 in を使用する必要がありsetLenient(false)
ますSimpleDateFormat
。
public static Date parseDate(String ds) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("MM-dd");
df.setLenient(false);
Date d = df.parse(ds);
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
cal.setTime(d);
cal.set(Calendar.YEAR, year);
return cal.getTime();
}
これは、引数「02-29」を渡すまではうまくいくようです。今年 (2012) はうるう年で、2012-02-29 が有効な日付です。「02-29」は正常に解析されているはずです。
で年の部分を指定しないと、1970 年に解析されることがわかりましたSimpleDateFormat
。また、1970 年はうるう年ではないため、"02-29" は解析に失敗します。そのため、1970 年の日付まで解析し、解析後の現在の年を設定する戦略は完全ではありません。
JavaでMM-ddフォーマット文字列を日付(日付は現在の年に設定する必要があります)に解析する最良の方法は何ですか?
PS1: このトピックを検索したところ、このサイトで多くの質問と回答が見つかりましたが、満足のいく回答が見つかりませんでした。PS2:df.setLenient(false);
有効な日付文字列のみが正常に解析される必要があるため、重要です。「01-32」、「02-30」などの無効な日付文字列は解析しないでください。
前もって感謝します。