Calendar.getInstance().get(Calendar.MONTH)

(所要時間:1時間)
なんで月だけ戻り値が 0 オリジンなんだよ……orz


追記:
調べてみると月の値を 0 オリジンで返すのは昔からの伝統らしい。
C 言語で時刻を扱うために使用される tm 構造体でも月の値は 0 オリジンだ。
なんでこんな事になってるのか理由を考えてみた。一つ思いついたのだが、表示用の文字列を生成する関数の実装と関係あるんじゃなかろうか。
年月日時分秒の中では唯一、月だけが数値に対応する名前を持っている。Jan とか Feb とか。
そして例えば、時刻値を"2005-apr-27"という書式の文字列に変換するためには、月の数値と月の名前とのマッピングを保持しておく必要がある。
で、そのマッピングを配列で保持しておいて、その配列の添え字に月の数値を直接突っ込みたいがために 0 オリジンの値にしてるんじゃなかろうか。
つまり、時刻文字列生成関数を実装した奴の都合なんでないの?
そう仮定してみると、確かに自分が時刻文字列生成関数を実装するとなったとしたら、配列のサイズを 13 にして最初を空にしておくとか、添え字にする時に 1 引くなんて方法はやりたくないしなぁw