Calendarクラスのsetメソッドについて

Calendarクラスのインスタンスに対して、set( int, int )メソッドを使用すると、月だけを1月に変更できたりするが、たとえば、2006/3/31というインスタンスに対して、2月に変更すると、2006/3/3になってしまう。これは、再計算の処理が走ってしまうためだ。
このsetメソッドを使うタイミングはおそらくカレンダーのGUIがあって、月だけを変更するパターンが多いかと思う。
その場合は、setを使うのではなく、addまたはrollを使用することで、2006/3/31から2006/2/28という変更ができる。
なので、指定前の月を保存しておき、指定後の月との差分で計算する必要がある。
setメソッドとadd、rollメソッドの動作の違いに注意すること。