• ベストアンサー

うるう年判定

こんにちは。今回も宜しくお願いします<(_ _)> 画面から入力された日付(生年月日)の妥当性をチェックしたいのですが、それにはまずクラス(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日と入力したり、とか)として、画面にて再入力を促すメッセージをだそうと思っていたのですが、この考え方はどこか変でしょうか? お手数お掛けいたしますが、宜しくお願い致します<(_ _)>

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

  • ベストアンサー
noname#30871
noname#30871
回答No.1

>  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
makinko0129
質問者

お礼

回答ありがとうございました。 うーん、お恥ずかしいことにgetとsetを混同していました。 month = g.get( Calendar.JUNE ); は、Calendar.JUNE (6月)をオブジェクトに関連付けてから、monthに代入しているつもりになっていました。 setを使ってCalendar.JUNE を関連付けたところ、getメソッドできちんと「5」が返ってきました。 アホなこと質問して申し訳ありませんでした。

その他の回答 (1)

回答No.2

どうも、こんにちは。質問の題名にかいてあることですが、うるう年かどうかを判定したいのでしょうか? GregorianCalendarクラスのisLeapYear()メソッドではんていできますよ。 isLeapYearの引数に年を入れてやるといいです。 質問文に書いてあることは、#1さんが答えてくれているみたいなんで。 では、大変でしょうけど、がんばってください。

makinko0129
質問者

お礼

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

関連するQ&A