- ベストアンサー
うるう年判定
こんにちは。今回も宜しくお願いします<(_ _)> 画面から入力された日付(生年月日)の妥当性をチェックしたいのですが、それにはまずクラス(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日と入力したり、とか)として、画面にて再入力を促すメッセージをだそうと思っていたのですが、この考え方はどこか変でしょうか? お手数お掛けいたしますが、宜しくお願い致します<(_ _)>
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> 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リファレンスをよく見てください。
その他の回答 (1)
- kamkamkam3
- ベストアンサー率42% (216/514)
どうも、こんにちは。質問の題名にかいてあることですが、うるう年かどうかを判定したいのでしょうか? GregorianCalendarクラスのisLeapYear()メソッドではんていできますよ。 isLeapYearの引数に年を入れてやるといいです。 質問文に書いてあることは、#1さんが答えてくれているみたいなんで。 では、大変でしょうけど、がんばってください。
お礼
お忙しいところお手数おかけして申し訳ありません。 今、自分の質問とAPIを見比べて「ちゃんと見ろやー!」と叫んでおります。 すっごい勘違いしておりました。 とても恥ずかしいです。 >isLeapYearの引数に年を入れてやるといいです。 ありがとうございます。 >では、大変でしょうけど、がんばってください。 簡単なことを1人で難しくしている、という感じもしますが、頑張りたいと思います。ありがとうございました。
お礼
回答ありがとうございました。 うーん、お恥ずかしいことにgetとsetを混同していました。 month = g.get( Calendar.JUNE ); は、Calendar.JUNE (6月)をオブジェクトに関連付けてから、monthに代入しているつもりになっていました。 setを使ってCalendar.JUNE を関連付けたところ、getメソッドできちんと「5」が返ってきました。 アホなこと質問して申し訳ありませんでした。