close

  對初學Java的人來說,java.util的Calendar設計的有點奇怪,取得instance是使用Calendar.getInstance(),getInstance這個method name是Singleton pattern慣用命名,會有以下的誤解:

  Calendar cal = Calendar.getInstance();

  cal.add(Calendar.MONTH, -1);    // 減一個月。

  乍看覺得會改掉系統時間值,至少在這個process上,可是事實證明不會。印出cal.getTime和Calendar.getInstance().getDate()結果是不一樣的,後者仍是系統時間值,前者則是減掉一個月的時間。另外做個測試如右:Calendar.getInstance().add(Calendar.MONTH, -1),完全沒有任何作用,Calendar.getInstance().getTime()所傳回的還是系統時間值,沒有減掉一個月。

  這麼看起來Calendar應該是Factory用法,類似CalendarFactory.create或Calendar.createInstance的語法。以getInstance為method name有點誤導他人之嫌。


  另一個會誤導初學者的是Calendar.set(year, month, day),傳入年月日初始化。可是month的部份卻是base 0,也就要傳入2009/05/12的話,是Calendar.set(2009, 5 – 1, 12),否則會變成六月了。

arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()