关于 java.util.calender 设计时候一些想法
new calender() 以后,考虑到性能 setday(), setyear() 都完成后,如果遇到要get 输出才根据情况重新计算.
如果我们遇到了设计一个处理信息的类,这个类有多个参与计算的要素,如果计算复杂,那就完全没有必要经常重复计算。
class a {
private int data1; //数据元素1
private long date2; //数据元素2
//变化标志 如果true
private boolean flag;
setdate1 (){ flag =true; //元素变化过了 } ..
getdate1(){ }..
process(){
if(flag){
//确定更新后 重新计算
}
}
getresult(){
process(); // 计算性的结果
return ...
}
}
calender 因为使用了这种计算方式的一些细节:
初时日期 1999-8-31日
调用 set(Calendar.MONTH, Calendar.SEPTEMBER) 便更了数据模型了一部分
因为不存在 9月31日 所以 1999 - 9 月 只有 30日
一旦使用get方法返回 结果。那么重新计算获得 10月1日 。
(根据
例如,lenient 模式下的 GregorianCalendar 将 MONTH == JANUARY、DAY_OF_MONTH == 32 解释为 February 1。
1月没有 32天 所以 就延后 1天 到了2月1日
)
2006年10月23日14:29:40
下面这段来自 java 手册翻译。
示例:假定 GregorianCalendar 最初被设置为 1999 年 8 月 31 日。
调用 set(Calendar.MONTH, Calendar.SEPTEMBER) 将该日期设置为 1999 年 9 月 31 日。
如果随后调用 getTime(),那么这是分析 1999 年 10 月 1 日的一个暂时内部表示。
但是,在调用 getTime() 之前调用 set(Calendar.DAY_OF_MONTH, 30) 会将该日期
设置为 1999 年 9 月 30 日,因为在调用 set() 之后没有发生重新计算。