こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

うるう年判定

こんにちは。今回も宜しくお願いします<(_ _)>
画面から入力された日付(生年月日)の妥当性をチェックしたいのですが、それにはまずクラス(API)をわかっていなくてはいけないと思い、お試しで作ったものが、私の想像していた通りに動きません。
import java.util.*;
public class Test {
 public static void main(String[] args) {
  int year;
  int month;
  int day;

  GregorianCalendar g = new GregorianCalendar();
  year = g.get( Calendar.YEAR );
  month = g.get( Calendar.JUNE );
  day = g.get( Calendar.DATE );

  System.out.println("year = " + year);
  System.out.println("month = " + month);
  System.out.println("day = " + day);

  }
}

上記のソースを実行すると、
C:\WINDOWS\デスクトップ\カレンダ>java Test
year = 2003
month = 3
day = 3
となります。月の指定はCalendar.JUNEとしているのに、どうして3と表示されるのでしょうか?

あともう一つ質問なのですが、GregorianCalendarに自分の好きな年月を与えたいのですが、
g.get( 1980 );
とすると実行時にArrayIndexOutOfBoundsExceptionのエラーがでます。
GregorianCalendarを使って任意の年月を渡すことは無理なんでしょうか?
私が最初考えたのが、画面から入力された値をそのままGregorianCarendarに渡して、もしもその時にエラーがでたらそれは妥当ではなかった値(閏年じゃないのに2月29日と入力したり、とか)として、画面にて再入力を促すメッセージをだそうと思っていたのですが、この考え方はどこか変でしょうか?

お手数お掛けいたしますが、宜しくお願い致します<(_ _)>

投稿日時 - 2003-11-03 13:40:05

QNo.695876

困ってます

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

>  year = g.get( Calendar.YEAR );
>  month = g.get( Calendar.JUNE );
>  day = g.get( Calendar.DATE );

 どういう動作を期待しているのかわかりませんが、月を取得したいのなら

month = g.get( Calendar.MONTH );

です。これを実行すると、次の疑問が出るでしょう。「11月なのに"10"が出てくる!」と。これはAPIの仕様で、1月は"0"、2月は"1"、……、12月は"11"になっているのです。

>GregorianCalendarに自分の好きな年月を与えたいのですが、
>g.get( 1980 );
>とすると

 与えるメソッドはget()ではなくてset()です。APIリファレンスをよく見てください。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Calendar.html

投稿日時 - 2003-11-03 14:08:20

お礼

回答ありがとうございました。
うーん、お恥ずかしいことにgetとsetを混同していました。
month = g.get( Calendar.JUNE );
は、Calendar.JUNE (6月)をオブジェクトに関連付けてから、monthに代入しているつもりになっていました。

setを使ってCalendar.JUNE を関連付けたところ、getメソッドできちんと「5」が返ってきました。
アホなこと質問して申し訳ありませんでした。

投稿日時 - 2003-11-03 18:10:44

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

どうも、こんにちは。質問の題名にかいてあることですが、うるう年かどうかを判定したいのでしょうか?

GregorianCalendarクラスのisLeapYear()メソッドではんていできますよ。

isLeapYearの引数に年を入れてやるといいです。

質問文に書いてあることは、#1さんが答えてくれているみたいなんで。

では、大変でしょうけど、がんばってください。

投稿日時 - 2003-11-03 16:26:10

お礼

お忙しいところお手数おかけして申し訳ありません。
今、自分の質問とAPIを見比べて「ちゃんと見ろやー!」と叫んでおります。
すっごい勘違いしておりました。
とても恥ずかしいです。
>isLeapYearの引数に年を入れてやるといいです。
ありがとうございます。
>では、大変でしょうけど、がんばってください。
簡単なことを1人で難しくしている、という感じもしますが、頑張りたいと思います。ありがとうございました。

投稿日時 - 2003-11-03 18:18:21

あなたにオススメの質問