dポイントプレゼントキャンペーン実施中!

javaのPGを作成しています。
内容的には1週間分のカレンダーを表示しようと思っているのですが・・・・・

Calendarクラスを使用して、対象の日付と曜日を取得しようとしているのですが、
年月日は指定のものが取得できているようなのですが、曜日だけはおそらく来月の曜日を
取ってしまっているようです。

原因がまったく分かりません。
下に、Calendarクラスを使用した部分を抜粋した
ソースを記述するので、なにが原因か教えていただけないでしょうか?

【jspファイル内】
<%
Calendar cal= Calendar.getInstance();
cal.set( 2010, 11, 25 ); // ※実際は変数だが、正しい値が入っているのは確認済み
%>
                 ・
                 ・
                 ・

for ( int loopCnt = 0; loopCnt < 7; loopCnt ++ ){
        if ( loopCnt > 0 ){
            cal.add(Calendar.DATE,1);
        }

    // デバッグ用
    out.print( cal.get(Calendar.YEAR));
    out.print( cal.get(Calendar.MONTH));
    out.print( cal.get(Calendar.DATE));
    out.print( cal.get(Calendar.DAY_OF_WEEK));

}

【実行結果】
2010 11 25 7
2010 11 26 1
2010 11 27 2
2010 11 28 3
2010 11 29 4
2010 11 30 5
2010 11 31 6

A 回答 (3件)

http://download.oracle.com/javase/7/docs/api/jav …

>month - the value used to set the MONTH calendar field. Month value is 0-based. e.g., 0 for January.

不思議なことに月は
0→1月
1→2月
11→12月
という仕様なんです。元から。
2010年12月25日は土曜日で、7で間違っていません。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
つまり、Calendar.set(自分で指定した年月日)を使用する場合、
setの段階で、指定月から - 1して、
表示時には改めて + 1してから取得するということになるんですかね?

なかなか面倒くさいですね・・・

でも、問題が解決しました。
ありがとうございます。

お礼日時:2010/11/25 11:37

この手の話で「月が 0~11」というときは, たいてい配列と関係がある. つまり, 月の名前を文字列で取得するときに 0~11 なら


static final String[] month_name = { "January", "February", ... };
とすればいいが 1~12 だと
static final String[] month_name = { null, "January", "February", ... };
と要素が 1つ余計に必要.

まあ非常にせこい話だが, この仕様は少なくとも Unix にさかのぼるはずで, そのときには「使えるメモリが今に比べて格段に少ない」という事情があった.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

要は処理都合って事ですね・・・。

お礼日時:2010/11/25 15:37

cal.get(Calendar.MONTH)


の結果は0から11です。つまり
2010 11 25

2010 12 25
なのです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
とりあえず、何でだめなのかは分かりました。

自分で、日付を指定する場合は、一手間加えないといけないみたいですね。

お礼日時:2010/11/25 11:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!