★★Java質問・相談スレッド141★★
レス数が950を超えています。1000を超えると書き込みができなくなります。
0960デフォルトの名無しさん
2010/11/17(水) 19:22:09こんなのはどうですか?
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とかいろいろ乗せられます。
レス数が950を超えています。1000を超えると書き込みができなくなります。