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 + "月");