>>955
こんなのはどうですか?
public class YMD {
  public final int fullYMD;
  public final int year;
  public final int month;
  public final int day;
  public YMD(String strYyyyMMdd) {
    this.fullYMD = Integer.parseInt(strYyyyMMdd);
    this.year = Integer.parseInt(strYyyyMMdd.substring(0, 4));
    this.month = ・・・;
    this.day = ・・・;
  }
  public int hashCode() { this.fullYMD; }
  public boolean equals(Object obj) { return this.fullYMD == obj.hashCode(); }
  /**現在日時のaddVal日先を示すYMDを返す。
   * @param addVal 加算日数。負の数も可。
   */
  public YMD dayPlus(int addVal) {
    Calendar cal = Calendar.getInstance();
    cal.reset();
    cal.set(this.year, this.month - 1, this.day);
    cal.add(Calendar.DAY_OF_MONTH, addVal);
    return new YMD(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(DAY_OF_MONTH));
  }
}
equalsとhashCodeを実装し、プロパティをコンストラクタ以外で変更不可
にしているので、Mapのキーとして使用しても安全でStringをキーにする場合とか
より高速に動くと思います。
さらに欲を出すとcomparableとかSerializableとかいろいろ乗せられます。