Java

Calendar.MONTHは0から始まる

More than 1 year has passed since last update.

Calendarクラスの月が「0」から始まるのは何故?

ある日、なんでmonthがひと月ズレるのかって話になりました。

int month = Calendar.getInstance().get(Calendar.MONTH);

このコードを実行したのが2月だと、monthは「1」になります。
「0」から始まるからだよって答えると、何故「0」からなのか、不便じゃない?
って話になりました。
今まで意識してなかったのですが、言われてみると「0」から始まるのはおかしい!
って気になり、知ってそうな方に聞いてみたところ、

日本は月を数えるとき、「1月、2月、3月・・・」というように表現するけど
英語圏は、数字じゃなくて「January、February、March・・・」と文字で表現するから
配列とかプログラムで管理しやすいように「0」始まりにしてるのでは?

という回答を頂き、これが正しいのか分からないけど、なるほど!と思いました。
ネットでも調べてみると、同じような疑問と回答がありました。

私が主に担当しているシステムは、未だにJava5や6で動いているため、
現在の「月」を取得したい場合、下記のように記載する事が多いです。

int month = Calendar.getInstance().get(Calendar.MONTH) + 1;
System.out.println(month + "月");

Java8以降であれば、LocalDateクラスを使うことで「+1」を書かずに現在の「月」を取得できます。

int month = LocalDate.now().getMonthValue();
System.out.println(month + "月");