Calendarがどうやったら使いやすくなるか

ようするに、Calendarの使いにくいところは、必ずCalendar用の変数が必要になるところです。


日付の設定の場合は、setのかわりにDateを返すgetを用意すれば便利です。

Date get(int year, int month, int date)

そうすると、次のように日付を指定してDateが取得できます。

Date d = Calendar.getInstance().get(2007, 6, 28);


加工系のメソッドに、DateをうけとってDateを返すものを付け加えるとワンライナーが書きやすくなります。

Date add(Date d, int field, amount)
Date set(Date d, int field, int value)

そうすると加工コードは次のようになります。

Date d = new Date();
Date next = Calendar.getInstance().add(d, Calendar.MONTH, 1);
System.out.println(next);


同様に、要素の取得も次のようなメソッドがあると便利です。

int get(Date d, int field)


ついでに、Loggingのglobalみたいなフィールドを用意しておくと()を書く必要がなくて敷居がまたちょっと下がるかもしれません。

Date d = new Date();
Date next = Calendar.global.add(d, Calendar.MONTH, 1);
System.out.println(next);


幸い、Calendarはクラスなので、こんな感じのメソッドを追加すればいいのではないかと思います。

Date get(int year, int month, int date){
  Date current = get();
  set(year, month, date);
  Date result = get();
  set(current);
  return result;
}

Date add(Date d, int field, amount){
  Date current = get();
  set(d);
  add(field, amount);
  Date result = get();
  set(current);
  return result;
}


Calendarを継承したクラスで、同じシグネチャでthrowsをつけたメソッドを定義していた場合はコンパイルが通らなくなりますけど。