Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2010/09/08 (Wed)

Date型から年だけを取り出してInteger型で返すメソッドはどう書けばいいのでしょうか?

| Date型から年だけを取り出してInteger型で返すメソッドはどう書けばいいのでしょうか? - ひとり開発日記。 を含むブックマーク はてなブックマーク - Date型から年だけを取り出してInteger型で返すメソッドはどう書けばいいのでしょうか? - ひとり開発日記。

タイトルで出オチですけど。

/** ゲストのプロフィール */
public class GuestProfile {

    /** 名前 */
    private String name;

    /** 誕生日 */
    private Date birthDate;

    // setter/getter省略

    /** 誕生年を返す */
    public Integer getBirthYear() {
        // ...???
    }
}

「このbirthDateから年だけを取り出すgetBirthYearメソッドを書きたいんですけど…???」って相談されて、私だったら、こう書くけど、って示したのは、こんなコード。

    /** 誕生年を返す */
    public Integer getBirthYear() {
        return Integer.valueOf(String.format("%tY", birthDate));
    }

「…これは暗号っぽいですよ。」「えー。」とか言う会話を交わしました。

って言うか、String#formatや、Formatterはキチンと知っておいた方が、何かと楽だと思いますです。

fumokmmfumokmm2010/09/10 21:57// 昔ながらのやり方で。
public Integer getBirthYear(d) {
Calendar cal = Calendar.getInstance();
cal.setTime(birthDate);
return Integer.valueOf(cal.get(Calendar.YEAR));
}

fumokmmfumokmm2010/09/10 21:58すいません、getBirthYearの引数のd要らなかったですね。

halflitehalflite2010/09/10 22:11私も一つだけだと、そう書くのがわかり易いかもとおもうのですけど、この後にgetBirthMonth()やgetBirthDay辺りを続けて書いていくと、毎度Calendarのインスタンス取って~、setTimeして~、って言うのが嫌になってくる、と…。

fumokmmfumokmm2010/09/11 22:29そんな時こそフィールドにCalendarクラスのインスタンスを保持して使い回しです!

halflitehalflite2010/09/12 03:15birthDateのsetterで、CalendarのインスタンスにsetTime(birthDate)やるの忘れて、「んんんー」となるのがお約束、ですかねー。

トラックバック - http://program.g.hatena.ne.jp/halflite/20100908