Calendar 代替の Joda が気が効いている件

全くいまさらなんだけど、「プロダクティブ・プログラマ -プログラマのための生産性向上術」で紹介されている Joda を調べてみた。

Joda.org

全く不便な JDK の Calendar を代替するもので、サクと見た限りでも「おっ」と思うものがいくつかある。実際いくつか使用例を追記していこうと思う。

public boolean isAfterPayDay(DateTime datetime) {
  if (datetime.getMonthOfYear() == 2) {   // February is month 2!!
    return datetime.getDayOfMonth() > 26;
  }
  return datetime.getDayOfMonth() > 28;
}

public Days daysToNewYear(LocalDate fromDate) {
  LocalDate newYear = fromDate.plusYears(1).withDayOfYear(1);
  return Days.daysBetween(fromDate, newYear);
}

public boolean isRentalOverdue(DateTime datetimeRented) {
  Period rentalPeriod = new Period().withDays(2).withHours(12);
  return datetimeRented.plus(rentalPeriod).isBeforeNow();
}

public String getBirthMonthText(LocalDate dateOfBirth) {
  return dateOfBirth.monthOfYear().getAsText(Locale.ENGLISH);
}

用例そのままだが確かに、かゆいところに手が届く感じ。getMonthOfYear() が 2 月にちゃんと 2 を返すとか良い感じ。(ただ、他の言語やってたり、今までの Java の Calendar の仕様に慣れきってるプログラマにとっては知らないで使うとバグ仕込む原因になるだろう。)