まずは下記ソースを参照してください。
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Calendar;
public class Test{
public static void main( String args[] ){
GregorianCalendar cal = new GregorianCalendar(2004, 5, 31);
System.out.println("年:" + cal.get(Calendar.YEAR));
System.out.println("月:" + cal.get(Calendar.MONTH));
System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println(); // ただの改行
System.out.println("比較:" + new Date().compareTo(cal.getTime()));
}
}
上記ソースについて質問です。
1.「年」「月」「日」を表示しておりますが、本来ならば
「年:2004」
「月:5」
「日:31」
と表示されると思っておりましたが実際は、
「年:2004」
「月:6」
「日:1」
と表示されてしまいます。
なぜでしょうか?
2.12行目にてjava.util.DateクラスのcompareToメソッドを用いて、
現在日付(2004/5/28)と7行目で指定している日付の比較をしていますが、
7行目で設定している日付を現在日付よりも前後に設定して実行させても、
「-1」しか返りません。
なぜでしょうか?
環境は、
J2SDK:1.4.2
OS:Windows XP Pro
です。
No.2ベストアンサー
- 回答日時:
これよく間違えやすいんですよね。
GregorianCalendarクラスの月は0~11なのです。
ですので、5月は4となります。
GregorianCalendar cal = new GregorianCalendar(2004, 5-1, 31);
というコードに直せば問題なくなると思います。
早速のご回答ありがとうございました。
「Calendar」クラスということで、
1月~12月だと思ってしまいました。
これでは、確かに間違えやすいですね。
質問1が理解できれば同時に質問2も分かったんですね。
ありがとうございました。
No.4
- 回答日時:
■当方も初心者なので勉強させてもらいました。
(蛇足ながら・・・)配列のindexと同じ考え方?のようで C でも同じだそうです。
○入力している部分では[1]引いて、出力している部分は[1]加えるから
ややこしいですが表示してみるとわかり易い気がします。
GregorianCalendar cal = new GregorianCalendar(2004,(5-1),30);
System.out.println("年:" + cal.get(Calendar.YEAR));
System.out.println("月:" + (cal.get(Calendar.MONTH)+1));
System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
//実際に比較している部分を出力してみる
System.out.println( new Date());
System.out.println(cal.getTime());
System.out.println("比較:" + new Date().compareTo(cal.getTime()));
同じ日付を入力しても当然時間データが無いので[new Date()]の方が大きく
なる←えらそうに書きましたが当方も出力されて気づきましたm(_~_)m
ご回答ありがとうございました。
C言語でも同じだったんですね。
知りませんでした。
今後C言語を勉強する際、意識してみます。
ありがとうございました。
No.3
- 回答日時:
まずは、1の回答から
2004年5月31日にセットする場合は、以下のように指定します。
GregorianCalendar cal = new GregorianCalendar(2004,4,31);
なぜなら、Calendar.MONTHの範囲が0から11までだからです。
また、月を取得して現在時間を表示する場合は、
(cal.get(Calendar.MONTH) + 1)のように指定します。
こちらも同様の理由です。
2,について
a,System.out.println("比較:" + new Date().compareTo(cal.getTime()));
→-1
b,System.out.println("比較:" + cal.getTime().compareTo(new Date()));
→1
なぜー1が返るかというと、()内のDateオブジェクトのほうが大きいからです。(aの場合)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- Visual Basic(VBA) swiftで年号を 1 2023/02/05 06:48
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインターに関する警告
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
JAVAのDouble型の小数点以下の...
-
JAVA 文字色変更
-
java教えてください。
-
EclipseでJava
-
改行の判定方法
-
JAVAでの占い
-
IPアドレスから組織やプロバイ...
-
NaNではなく、0と表示させたい
-
配列を後ろから数えるには?
-
JAVA 三角形の判定
-
DOMで要素の値がNULL
-
教えてほしいです。
-
printfの%fにおいて教本どおり...
-
「続行するには何かキーを押し...
-
LC発振回路-ループ利得
-
Javaでカレントディレクトリを...
-
文字列の引き算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
C言語のポインターに関する警告
-
改行の判定方法
-
EclipseでJava
-
JAVAのDouble型の小数点以下の...
-
Javaでカレントディレクトリを...
-
文字列の引き算
-
JAVA 文字色変更
-
Javaのプログラムがどうしても...
-
エクセルマクロ文で、赤文字セ...
-
java シンボルが見つかりません...
-
java int integer
-
配列を後ろから数えるには?
-
java.util.zipで作成したアーカ...
-
JAVAのエラーの意味が分かりま...
-
会員情報登録プログラムの作成...
-
nullcline
-
コマンドプロンプトでひらがな...
-
NaNではなく、0と表示させたい
おすすめ情報