愚痴

ご存じCalendarクラスの月の仕様。

Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH) + 1;. //月は0オリジン(0∼11が返ってくるので+1する) 

こうやってコメントしていても、暫くすると忘れて結局加算するのを忘れる。本当に嫌な仕様だ。
そもそもどうしてこういう仕様にしてるんだっけか?

一説にはtime.hのtm構造体メンバtm_monに習っているらしい。

  • time.h
struct tm {
  int tm_sec;      // 秒 (0から59)
  int tm_min;      // 分 (0から59)
  int tm_hour;     // 時 (0から23)
  int tm_mday;     // 日 (1から31)
  int tm_mon;      // 月 (0から11)
  int tm_year;     // 年 (年 - 1900)
  int tm_wday;     // 週 (0から6)
  int tm_yday;     // 経過日数 (0から365)
  int tm_isdst;    // 夏時間 
};

日には誰も突っ込まないのね。

それにしてもCalendarクラスにした時点で-1を打ち消そうという考えは無かったのか? あ、違うか。少なくともプログラマにとっては0オリジンの方が直感的だったということか。

こんなのも出ているんだな。
jsr-310 JSR-310 Date and Time API - Home page