• ベストアンサー

JavaのCalendarのMONTHはなぜ0から始まるのですか

最近Javaを学び始めたものです。 CalendarクラスのMONTHフィールドについてですが、1月から12月がそれぞれ0から11に対応しているのは、何か意味があるのでしょうか? 特に困っているわけではありませんが、なんとなく疑問になったもので。もし知っている方がおられればお願いします。

  • Java
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • WDY
  • ベストアンサー率28% (121/431)
回答No.1

仕様です。 配列は何故0番からなの?と同じです。

tori29
質問者

補足

言葉足らずでした。 DATEは1日が1ですよね?で、MONTHは1月が0。 なぜこんなややこしい仕様にしたのか、何か経緯があるものかと。

その他の回答 (2)

  • nak777r
  • ベストアンサー率36% (49/136)
回答No.3

補足です 経過日数等を算出する場合は、月は0~11の方が良いから という事もかんがえられますね 2009年の 0ヶ月と 5日

tori29
質問者

お礼

>日本なら、1~12の方が良いでしょうね なるほど、英語圏では1月を表現するのに「January」と言うように、もともと月と数字の関連が薄いのかもしれませんね。もしもそうならJanuaryが0であってもそれほど面倒だとは思わないのでしょうね。 勉強になりました。ありがとうございました。

  • nak777r
  • ベストアンサー率36% (49/136)
回答No.2

日本なら、1~12の方が良いでしょうね String MONTH_TABLE[] = {"JANUARY","FEBRUARY","MARCH"・・・ と考えればよろしいかと

関連するQ&A

  • java Calendar作成

    javaでのカレンダー作成についての質問です。 表示イメージ(_はすべて半角スペースの意です) year年month月(今回は2016年04月) _日_月_火_水_木_金_土 _______________1__2_ _3__4__5__6__7__8__9_ 10_11_12_13_14_15_16_ 17_18_19_20_21_22_23_ 24_25_26_27_28_29_30_ public class CalShow { public static void main(String[] args) { java.util.Calendar cal = java.util.Calendar.getInstance(); int year = Integer.parseInt(args[0].substring(0, 4)); int month = Integer.parseInt(args[0].substring(4)); cal.set(java.util.Calendar.YEAR, year); cal.set(java.util.Calendar.MONTH, month - 1); cal.set(java.util.Calendar.DAY_OF_MONTH, 1); //日曜日=1で土曜日=7まで int week = cal.get(java.util.Calendar.DAY_OF_WEEK); //月末日 int lastDay = cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH); System.out.println( year + "年" + month + "月"); System.out.println("_日_月_火_水_木_金_土"); //日付のない日数分回す for (int i = 1; i < week ; i ++) { System.out.print("___(半角3マス)"); } String empty; //1日から月末日まで、カレンダーを表示する for (int day = 1 ; day <= lastDay ; day ++) { empty = ""; if (day < 10) { empty = "_"; } System.out.print( empty + day + "_"); ●if ( == java.util.Calendar.SATURDAY) { System.out.println(""); } } } } ●部分で土曜日なら改行、としたいのですが、 上でint weekで土曜日=7と判明しているため、 if ( week == java.util.Calendar.SATURDAY) { とか if ( day % 7 == java.util.Calendar.SATURDAY) { など色々考え付くものを書き込んでいるのですが全く上手く動作しません。 どうしたらよいのかご教授お願いいたします・・・;;

    • ベストアンサー
    • Java
  • getActualMaximum(Calendar.DAY_OF_MONTH) について

    こんばんは。今GUIを作成しているのですが、 Jテキストフィールドに入力した年と月をもとに、その年のその月の日数分、日付と曜日をJラベルで表示させていたのですが、昨日までは問題なく動作していたのですが、いつの間にか2月の表示が31日まで表示されるようになっていました。4月はちゃんと30日まで表示されていました。原因がよくわからないので、以下のプログラムを作成し、今年の2月が何日あるか調べてみたのですが、出力結果は31でした。 import java.util.Calendar; public class Cal{ public static void main(String[] args){ Calendar day=Calendar.getInstance(); day.set(Calendar.YEAR,2008); day.set(Calendar.MONTH,1); int niti=day.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println(niti); } } 昨日まではこういったやり方で問題なくその年のその月の日数が出せたのですが、なにがおかしいのか原因がわかりません。どなたか悪い部分を教えてはいただけませんか。 こちらの環境ですが、windows vistaに、JavaSE6 Update4です。 よろしくおねがいします。

    • ベストアンサー
    • Java
  • javaでカレンダー

    javaでカレンダーを作りたいのですが、 どなたかいい案があれば、教えていただけませんか? 初心者なのでCalendarクラスがよく理解できていません。 よろしくお願いします。j

  • java Calendarクラス

    javaで月、日を入力してカレンダーを作成したのですが 年と月のsetでmonth-1はマジックナンバーなので直したいのですが どなたかわかる方教えてください。 package sample; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Test { private final static int firstday = 1; public static void main(String[] args) { //カレンダーのインスタンスを取得します Calendar cal = Calendar.getInstance(); //文字入力 BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); //年を取得 int year =0; //月を取得 int month =0; //最後の日付 int lastDay =0; //月初めの曜日を取得 int week =0; //年妥当性チェック boolean CheckYear = true; //月妥当性チェック boolean CheckMonth = true; try { //年妥当性チェック while(CheckYear){ System.out.println("年を入力してください"); //年を入力します year = Integer.parseInt(input.readLine()); //年が4桁の場合 if(String.valueOf(year).length()==4){ CheckYear = false; }else{ System.out.println("年は4桁で入力してください"); } } //月妥当性チェック while(CheckMonth){ System.out.println("月を入力してください"); //月を入力します month = Integer.parseInt(input.readLine()); //月が1~12の場合 if(month>=1&&month<=12){ CheckMonth = false; }else{ System.out.println("月1~12を入力してください"); } } }catch(IOException e){ System.out.println("数字以外は入力しないでください"); System.out.println("処理を中断します"); return; }catch (Exception a) { System.out.println("数字以外は入力しないでください"); System.out.println("処理を中断します"); return; } //年、月をセットします cal.set(year,month-1,cal.getActualMinimum(Calendar.DATE)); //月初めの曜日を取得 week = cal.get(Calendar.DAY_OF_WEEK); //年月を出力する System.out.println(String.valueOf(year)+"年"+String.valueOf(month)+"月"); //曜日を出力する System.out.println("日 月  火  水  木  金  土"); //最後の日付を取得する lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); /* * 最後の日付を取得する */ if(month==1||month==3||month==7||month==8||month==10||month==12) { lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); }else if(month==4||month==6||month==9||month==11){ lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); }else if(year%4==0&&month==2){ lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); }else if(year%4!=0&&month==2){ lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); } /* * カレンダーを出力する */ //最後の日付まで繰り返す // 最後の日付まで繰り返す for (int i = 1; i <= lastDay; i++) { // 1日とそれ以外で分岐する if (i == 1) { // 1日の曜日位置まで移動する for (int j = 1; j < cal.get(Calendar.DAY_OF_WEEK); j++) { System.out.print(" "); } } else { // 日付を増やす cal.add(Calendar.DAY_OF_MONTH, firstday); } // 1~9と10~で表示を変える if (i < 10) { System.out.print(" " + i); } else { System.out.print(" " + i); } // 土曜日になったら改行する if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { System.out.println(""); } } } }

  • java コマンドライン引数を利用したカレンダー

    args[0]に例えば200805と入れたら2008年5月のカレンダーが表示される、そんなプログラムを書きたいと思っています。 理想は↓の形です。(_は空欄の意です;) 2008年5月 日 月 火 水 木 金 土 ___________1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 importは使わないよう指示が出ていますので、フルネームでカレンダークラスを記載しています。 public class CalShow { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ java.util.Calendar cal = java.util.Calendar.getInstance(); //コマンドライン引数の前4桁をyear、 int year = Integer.parseInt(args[0].substring(0, 4)); //後ろ2桁をmonthとしてそれぞれintで定義 int month = Integer.parseInt(args[0].substring(4)); System.out.println( year + "年" + month + "月"); System.out.println(" 日 月 火 水 木 金 土"); cal.set(year, month - 1, 1); int startDay = cal.get(java.util.Calendar.DAY_OF_WEEK); cal.add(java.util.Calendar.MONTH, 1); cal.add(java.util.Calendar.DATE, -1); int lastDay = cal.get(java.util.Calendar.DATE);      /*なんとなくここまで書けたのですが、ここからどのように木曜日と1日を繋げていけばよいのか分からなくて困っています。 どういったメソッドを使えばいいのかなど、どなたか教えていただけませんでしょうか? よろしくお願いいたします。*/ } }

    • ベストアンサー
    • Java
  • Javaでカレンダー作成

    Java超初心者です。 JavaでSwingを使ってカレンダーを作ることになったんですが、 カレンダーに日付を表示する方法がわかりません。 JButtonで縦6個、横7個の計42個のボタンを作り、 そのボタン1個1個に起動した月の日付を表示する カレンダーを作りたいんです。 Calendarクラスでモデルを作った後に、そのクラスをどのように 利用してボタン1個1個に日付を表示させればいいのでしょうか? 説明してくれる方、よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaでカレンダー作成

    Javaを初めて4日目のビギナーです。 Javaを使用し、Webページ上にカレンダーを作りたいです。 上に曜日があって、左右の「次の月」、「前の月」 ボタンで月が切り替わるカレンダーです。 Calendarクラスなどを使ってできるだけシンプルに作りたいのですがなかなかうまくいきません。特に、月を切りかえるためにアンカータグでリンクを張る記述の仕方や、月が切り替わるとき最初の日付を曜日に合わせて移動させること、年が変わるときの記述などでつまづいています。 急いでいます。どうかご回答よろしくお願い致します。

  • javaのカレンダー作成について

    コマンドライン引数で渡された6桁の数字をカレンダーに起こすプログラムを作成しています。 以下のように書きました。 ↓ public class Calendar { public static void main(String[] args) { java.util.Calendar cal = java.util.Calendar.getInstance(); int year = Integer.parseInt(args[0].substring(0, 4)); int month = Integer.parseInt(args[0].substring(4)); cal.set(java.util.Calendar.YEAR, year); cal.set(java.util.Calendar.MONTH, month - 1); cal.set(java.util.Calendar.DAY_OF_MONTH, 1); int week = cal.get(java.util.Calendar.DAY_OF_WEEK); //日曜始まり一週間のセット作成 int weekset = 0; if (week == cal.SUNDAY) { weekset = 0; } else if (week == cal.MONDAY) { weekset = 1; } else if (week == cal.TUESDAY) { weekset = 2; } else if (week == cal.WEDNESDAY) { weekset = 3; } else if (week == cal.THURSDAY) { weekset = 4; } else if (week == cal.FRIDAY) { weekset = 5; } else if (week == cal.SATURDAY) { weekset = 6; } //月末日 int lastDay = cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH); //7日ごとに改行するカウンタ用意 int counter = 0; System.out.println( year + "年" + month + "月"); System.out.println(" 日 月 火 水 木 金 土"); //weekset分回す for (int i = 0; i < weekset; i++) { System.out.print(" "); counter ++; } //1日から月末日まで、カレンダーを表示する for (int day = 1 ; day <= lastDay; day ++) { if (day < 10) { System.out.print(" " + day + " "); } else { System.out.print( day + " "); } counter ++; if (counter == 7) { // 7日おきに改行する counter = 0; System.out.println(); } } } } きちんと動作してくれるのですが、2つ目のループ内の、 ************** for (int day = 1 ; day <= lastDay; day ++) { if (day < 10) { ●System.out.print(" " + day + " "); } else { ●System.out.print( day + " "); } ************** ●の部分の出力はループの外で一つに纏められるはずだと指摘されました。 dayの後ろの部分にだけなら、for文の前にString str = "";と宣言しておいて、 for (int day = 1 ; day <= lastDay; day ++) { str += " "; とすることで空白を付けられる気がしているのですが、前部分に空白を設定した上でまとめて出力する方法が分かりません。 お分かりになる方、どのようにすればよいのかご教授お願いいたします。 (また、上記の方法自体全く的外れということでしたらそれを含めてご教授お願いいたします・・・;;)

    • ベストアンサー
    • Java
  • カレンダーの表示部分をどうしたらいいか困っています

    Javaでcalコマンドと同じ働きをするカレンダーを作っています。(基本方針として、カレンダー関連のクラスが使えないことになっています。) とりあえず、1753年以降でmonth yearと入力するとyear年month月のカレンダーを表示するのには成功したのですが、(http://cube.mods.jp/MyCalendar.txt)これを1年から1752年にも拡張し、yearと入力するとyear年12ヶ月分のカレンダーを表示するようにしようとしています。(http://cube.mods.jp/MyCalendar2.txt) ここで上手く行かないことが出てきました。 1:1年1月1日のカレンダーの表示がおかしい。 calコマンドでは土曜日から始まっているのが、これだと違う曜日からになってしまいました。MyCalendar.javaではカレンダー表示部分printCalendarは特にこれでも問題なかったのですが、MyCalendar2.javaになっておかしくなったので困っています。 2:カレンダーを横に3つ並べて表示できない calコマンドと見た目も似せて作らなくてはいけないので、カレンダーを横に3つ並べたいのですが、このままだと横に並べられないのでどうしたらいいか考えています。何かスマートな方法が思いついた方、是非教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • java.util.CalendarでのgetTime結果

    お世話になります。 カレンダークラスを使用してDBへ格納するためのシリアル値を取得しようとしています。 やりたいことは任意の年月日(時分秒は無し)をPostgreSqlのDATEフィールドに日付として格納させ、レコード取得した結果の該当DATEフィールドと先ほどの任意の年月日を比較させたいのです。予想される結果は「一致」なのですがこれが不一致となってしまいます。 例えばjava.util.CalenderクラスのgetTime()を使用して取得されるシリアル値は1174611700734ですが、DBへ格納された後にレコードから取得されるデータは1174575600000となっていて比較しても不一致となってしまいます。 java.util.CalenderのgetTime()結果は実行するたびに値が異なるようで、下3桁が上記例のように"734"だったり"015"だったりします。 getTime()の結果で返されるシリアル値の下3桁を"000"とする方法はあるのでしょうか? java.util.Calendar xcal = java.util.Calendar.getInstance(); xcal.set(2007, 3 - 1, 23, 0, 0, 0); java.util.Date xday = xcal.getTime(); #xdayには"1174575600015"と格納されています。 #xdayをそのままPostgreSqlへデータ投入すると、日付のみ格納され次回取得時には"1174575600000"となります。

    • ベストアンサー
    • Java

専門家に質問してみよう