Calendarの内部に下記のフィールドを持ってます。
transient boolean areAllFieldsSet;
何らかの操作で該当フィールドがFALSEになると、
月の計算がおかしくなる場合があります。
Calendar cal = 20120930
for (int i = 0; i < 12; i++) {
System.out.println("===="+cal.getTime());
cal.add(Calendar.MONTH, -1);
}
====Sun Sep 30 00:00:00 JST 2012
====Thu Aug 30 00:00:00 JST 2012
====Mon Jul 30 00:00:00 JST 2012
====Sat Jun 30 00:00:00 JST 2012
====Wed May 30 00:00:00 JST 2012
====Mon Apr 30 00:00:00 JST 2012
====Fri Mar 30 00:00:00 JST 2012
====Thu Mar 01 00:00:00 JST 2012
====Mon Jan 30 00:00:00 JST 2012
====Fri Dec 30 00:00:00 JST 2011
====Wed Nov 30 00:00:00 JST 2011
====Sun Oct 30 00:00:00 JST 2011
対応方法として、下記のようにオブジェクトを作り直しなければならない
date = (Calendar)Calendar.getInstance().clone();
date.setTime(date.getTime());
0 件のコメント:
コメントを投稿