/ / ww SimpleDateFormatの奇妙な動作-Java、解析、simpledateformat

wwの奇妙な動作SimpleDateFormat - java、parsing、simpledateformat

誰もが日付を解析しようとしているときにこれらの値を取得する理由を説明できますか? 次のように、3つの異なる入力を試しました。

1)2013年の第3週

Date date = new SimpleDateFormat("ww.yyyy").parse("02.2013");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR));

どの出力: 02.2013 (私の期待通りに)

2)2013年の最初の週

Date date = new SimpleDateFormat("ww.yyyy").parse("00.2013");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR));

どの出力: 52.2012 (2013年の最初の週は2012年の最後の週でもあるため、これは問題ありません)

3)2013年の第2週

Date date = new SimpleDateFormat("ww.yyyy").parse("01.2013");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR));

どの出力: 1.2012 (これは絶対になります いいえ 私に感じる)

誰がこれが起こるのか知っていますか? (年の週)。(年)の形式で日付を解析する必要があります。間違ったパターンを使用していますか?

回答:

回答№1は16

あなたが使っている ww、「週の週」ですが、その後 yyyy 「平年」ではなく「暦年」です。 週の週を設定してから暦の年を設定することは、問題のレシピです。なぜなら、それらは事実上、単に別々の番号付けシステムだからです。

あなたは使用している必要があります YYYY フォーマット文字列で週年を指定します...残念ながら、それはできません」 取得する 適切な方法で値。 (私は期待する Calendar.WEEKYEAR 一定ですが、そのようなことはありません。)

また、年の週の値は0ではなく1から始まり、2週間の週はありません。それは どちらか 2013年の最初の週 または それは2012年の最後の週です...それは両方ではありません。

可能であれば、私は週と週の使用を個人的に避けます。特に、ある暦年の日付が異なる週にある場合は、非常に混乱する可能性があります。


回答№2については2

つかいます Calendar.getWeekYear() 年の値を同期する Calendar.WEEK_OF_YEAR フィールド。 週および週の年についての詳細は、 グレゴリオ暦 doc。