1

SimpleDateFormat の奇妙な動作に遭遇しました。対処方法がわかりません。

日付を特定の形式 (曜日、日、月、年、時間) で解析する必要があります。ただし、日付を解析すると非常に奇妙な結果が得られる(他の日付)という動作に遭遇しました。これは小さな自己完結型の例で、私のマシンでの出力です。

public static void main(String[] args) throws Exception {
    test("E YYYY kk:mm:ss");
    test("E d YYYY kk:mm:ss");
    test("E d MMMM YYYY kk:mm:ss");
}

public static void test(String format) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    Date now = new Date();
    System.out.println(now);
    String formattedNow = sdf.format(now);
    System.out.println(formattedNow);
    Date parsedFormattedNow = sdf.parse(formattedNow);
    String formattedParsedNow = sdf.format(parsedFormattedNow);
    System.out.println(formattedParsedNow);
    System.out.println(formattedNow.equals(formattedParsedNow));
}

出力:

Sat Apr 27 13:48:07 MSK 2013
Sat 2013 13:48:07
Sat 2013 13:48:07
true
Sat Apr 27 13:48:07 MSK 2013
Sat 27 2013 13:48:07
Sat 5 2013 13:48:07
false
Sat Apr 27 13:48:07 MSK 2013
Sat 27 April 2013 13:48:07
Sat 5 January 2013 13:48:07
false

では、なぜ 27 が 5 に、4 月から 1 月に変わるのでしょうか。

4

1 に答える 1