• ベストアンサー

なぜ+1するのでしょう?

gigamaidenの回答

  • ベストアンサー
回答No.2

先ほどの、回答者ですが、少し訂正を 基本的には、そのような仕様ですが どうやら、このcal.getの場合は MONTHにかぎり、0~11で、他は普通の値を返すようですね。

renounce
質問者

お礼

ありがとうございました! とても助かりました!

関連するQ&A

  • Java CDLC 1.0 での日付計算

    CLDC(携帯向けJava)での日付計算がうまくいきません。 JavaのSEでは、Calender.addなる日付計算関数があるようですが、 CLDC(携帯向けJava)では使えないみたいなので、以下の実験コードを 書いてみました。しかし、意図する結果が得られませんでした。 このケースでのよい計算方法をご存知でしたらご教授 頂ければうれしく思います。または、 以下のプログラムのバグ、ポカアホミス、作法的要修正点、 日付計算仕様的な可能/不可能等お気づきありましたら、 ご指摘頂ければ嬉しいです。 尚、意図した結果とは、下記の★部分において、 1970年1月1日(?曜日) 0:1:0 です。 グリニッジ標準時 1970 年 1 月 1 日 0:00:00 (エポック) からの 経過時間が、60000ミリ秒(60秒) というのを期待しました。 --以下コード-- void print_cal(Calendar cal){ String WEEK=" 日月火水木金土"; int year =cal.get(Calendar.YEAR); int month =cal.get(Calendar.MONTH)+1; int day_of_month=cal.get(Calendar.DAY_OF_MONTH); int day_of_week =cal.get(Calendar.DAY_OF_WEEK); int hour =cal.get(Calendar.HOUR_OF_DAY); int minute =cal.get(Calendar.MINUTE); int second =cal.get(Calendar.SECOND); System.out.println("" + year + "/" + month + "/" + day_of_month + "(" + WEEK.charAt(day_of_week) + ") " + hour + ":" + minute + ":" + second); } Calendar cal = Calendar.getInstance(); long now = cal.getTime().getTime(); print_cal(cal); cal.set(Calendar.YEAR, 2007); cal.set(Calendar.MONTH, Calendar.MAY); cal.set(Calendar.DAY_OF_MONTH, 31); cal.set(Calendar.HOUR_OF_DAY, 6); cal.set(Calendar.MINUTE, 12); cal.set(Calendar.SECOND, 44); print_cal(cal); //<---- 2007/5/31(木) 6:12:44 long time1 = cal.getTime().getTime(); cal.set(Calendar.YEAR, 2007); cal.set(Calendar.MONTH, Calendar.MAY); cal.set(Calendar.DAY_OF_MONTH, 31); cal.set(Calendar.HOUR_OF_DAY, 6); cal.set(Calendar.MINUTE, 13); cal.set(Calendar.SECOND, 44); long time2 = cal.getTime().getTime(); print_cal(cal); //<------ 2007/5/31(木) 6:13:44 long sabun = time2 - time1; //<---- 60000 Date hoge = new Date(sabun); long hoge_time = hoge.getTime(); System.out.println(hoge_time); <--- 60000 //setTime: Calendar の現在の時刻を、指定された Date に。 cal.setTime(hoge); //★この時点でprint_cal。 print_cal(cal); <---- 1970/1/1(木) 9:1:0 ?9時間も経ってる? long now2 = cal.getTime().getTime(); System.out.println("now2: " + now2); <--- 60000。でも60秒がはいってるぽい --コード以上--

    • ベストアンサー
    • Java
  • Javaによる現在時刻の表示について

    Javaで現在時刻を表示するプログラムを作りました。 今のままだと 2009/8/26(木) 15:8:7となり、 月日・時間分秒が一桁のときは前に0をつけて二桁(15:08:07のように)表示にしたいと思います。 何かいい方法はないでしょうか? if文で作成するとなると、かなりたくさんのコードを書かないといけない気がします。 良い案があれば是非ご教授頂ければと思います。 import java.util.Calendar; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Servlet_106 extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException{ res.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = res.getWriter(); String title = "現在時刻:"; Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; int day = cal.get(Calendar.DATE); StringBuffer dow = new StringBuffer(); switch (cal.get(Calendar.DAY_OF_WEEK)){ case Calendar.SUNDAY: dow.append("日"); break; ~~~(略)~~~ } int hour = cal.get(Calendar.HOUR_OF_DAY); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); out.println("<html lang=\"ja\">"); out.println("<head><title></title></head>"); out.println("<body>"); out.println("<p>現在時刻:" + year + "/" + month + "/" + day + "(" + dow + ")" + hour + ":" + minute + ":" + second + "</p>"); out.println("</body></html>"); out.close(); } }

    • ベストアンサー
    • Java
  • Javascriptで日付毎のチェックボックスを判断する方法

    JAVAで予約できるカレンダーを作成するという課題が学校で出てしまい非常に困っています。 仕様: カレンダー関数により、年・月・日を取得しています。 Calendar cal = Calendar.getInstance(); cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DATE)); int YEAR = cal.get(Calendar.YEAR); int MONTH = cal.get(Calendar.MONTH)+1; int DATE = cal.get(Calendar.DATE); 下記の機能を”Javascript”で実現したいのですが、力不足でどうすることもできません。 実装したい機能: 予約の日付はカレンダー上にある日付毎に設置されたチェックボックスで判断します。予約できる日付は、選択した日付から前後連続した日付けのみ選択可能で、他の日付をまたいで予約することはできないようにする、というものです。 例をあげてみます。 10月10日のチェックボックスを選択したとします。選択した時点で10月の9、10、11日のみチェックボックスにチェックが可能となり、その他はdisabledにします。 次に10月11日のチェックボックスを選択すると、選択した時点で10月の9、12日が選択できるようになります。予約は連続した日付のみ可能ですので、10、11日とその他はdisabledにしなくてはなりません。 どのようなアドバイスでもかまいません。 回答をお願いします。

  • javaでの時刻更新

    javaの時刻更新について質問です。 jLabel4.setText(year + "/" + month + "/" + day + " " + dow+ " " + hour + ":" + minute ); に入る時刻を1秒間隔で更新したいのですが、どうしたらいいのか分からないのです。 他のサイトでtimerが使えると聞いたので調べてみたのですが、よくわからなくて。。。 プログラムのどこから記述していいのかさっぱりで。 分かる方には馬鹿な質問ですが、よろしければお知恵をお貸しください。 private void tokei() { Calendar cal1 = Calendar.getInstance(); //(1)オブジェクトの生成 int year = cal1.get(Calendar.YEAR); //(2)現在の年を取得 int month = cal1.get(Calendar.MONTH) + 1; //(3)現在の月を取得 int day = cal1.get(Calendar.DATE); //(4)現在の日を取得 int hour = cal1.get(Calendar.HOUR_OF_DAY); //(5)現在の時を取得 int minute = cal1.get(Calendar.MINUTE); //(6)現在の分を取得 StringBuffer dow = new StringBuffer(); switch (cal1.get(Calendar.DAY_OF_WEEK)) { //(8)現在の曜日を取得 case Calendar.SUNDAY: dow.append("日曜日"); break; case Calendar.MONDAY: dow.append("月曜日"); break; case Calendar.TUESDAY: dow.append("火曜日"); break; case Calendar.WEDNESDAY: dow.append("水曜日"); break; case Calendar.THURSDAY: dow.append("木曜日"); break; case Calendar.FRIDAY: dow.append("金曜日"); break; case Calendar.SATURDAY: dow.append("土曜日"); break; } jLabel4.setText(year + "/" + month + "/" + day + " " + dow + " " + hour + ":" + minute ); } }

  • 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
  • 配列を使ってカレンダーを表示したい。

    配列を使った場合のカレンダー表示方法で質問します。 現在、 Calendarクラスを使い、配列に日を入れていくようにしているのですが Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 at CalendarSample.main(CalendarSample.java:33) のようなエラーが生じます。 以下のような手順でで考えることは可能なのでしょうか? よろしくお願いします。 Calendar cal = Calendar.getInstance(); //最終日 int max = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //月の週の合計数 int week = cal.get(Calendar.WEEK_OF_MONTH); //日を格納する配列 int[][] date = new int[week][7]; int n = 0; for(int d=1;d<=max;d++){ //年月日の設定 cal.set(2011,6,d); int youbi = cal.get(Calendar.DAY_OF_WEEK); date[n][youbi] =d; //日が、土曜になったら、配列の列を変える if(cal.get(Calendar.DAY_OF_WEEK)==6){ n+=1; } }

  • 日付の比較(Beforeメソッド)

    WIN XP j2sdk1.4.2_04 です。 宜しくお願いします。 int chkYear = 2004 int chkMonth = 07 int chkDay = 26 Calendar cal1 = new GregorianCalendar(); Calendar cal2 = new GregorianCalendar(chkYear,chkMonth-1,chkDay); cal1.get(cal1.YEAR); cal1.get(cal1.MONTH); cal1.get(cal1.DATE); if(cal2.before(cal1) == true){  処理 } cal1 で現在の日時を取得し Beforeメソッドで cal2 の値が現在日時より過去だったらエラーを返す ような処理にしてます。 Cal2に当日の日付を入力すると 過去の日付となってしまいます。 前日と翌日はきちんと動作しますが、 当日だけがうまく行きません。 なにか良い方法はありますでしょうか?

    • ベストアンサー
    • Java
  • 入力された年月からその月の末日を取得する

    import java.util.*; class Sample { public static void main(String[] args) { System.out.println(args[0]); Calendar cal = Calendar.getInstance(); cal.set(2000,1,1); int y = cal.get(Calendar.YEAR); int m = cal.get(Calendar.MONTH) + 1; int last = cal.getActualMaximum(Calendar.DATE); System.out.print(y + "年" + m + "月の末日は "); System.out.println(last + "日です"); } } で、2000年2月の末日を取得することが出来るのはわかったのですが プログラム上で年月の入力を促してその月の末日を取得するにはどうすればいいのでしょうか? (プログラム実行例) C:\JAVA\SAMPLE>java Sample 2009 2 2009年2月の末日は 28です ↑のようにプログラム上で年 月を入力して実行し、末日を取得したいのですが・・・ 多分この場合、入力数値などに対する例外処理や閏年の処理などもやらないとダメだと思いますがよくわかりません

    • ベストアンサー
    • Java
  • Calendarクラスでエラーがでる

    こんにちは。 以下の単純なコードでエラーが出ます。 import java.util.Calendar; public class CalTest { public static void main(String args[]) { Calendar cal = cal.getInstance(); int year = 2002, month = 9, day = 19; cal.set(year,month,day); } } エラーは CalTest.java:6: 変数 cal は初期化されていない可能性があります。 Calendar cal = cal.getInstance(); です。使っているのはj2sdk1.4.0_01ですが、方法が変わったんでしょうか? 誰か分かる人がいたら教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • 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(""); } } } }