4

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」などの無効な日付文字列は解析しないでください。

前もって感謝します。

4

4 に答える 4

4

これは少しハックと見なされる可能性がありますが、次のように、解析する前に日付文字列の末尾にいつでも年を付けることができます。

ds += "-" + Calendar.getInstance().get(Calendar.YEAR);
SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy");
// Parse date as usual
于 2012-07-15T16:32:43.913 に答える
2

コードで行うようにカレンダーから年を取得し、解析フォーマット文字列をに設定してからMM-dd-yyyy実行します

 Date d = df.parse(ds + "-" + year);
于 2012-07-15T16:33:14.577 に答える