実は、
http://oshiete1.goo.ne.jp/qa4722681.html
これは添削問題だったんですね。
まず自分がある一部分しかソースコードを記述しなかったのがいけなかったのかもしれませんが、添削問題の解答は以下のようなものでした。
//「SimpleDateFormat」クラスを活用できていませんよ。
//上記ままだと、処理のタイミングによっては現在日付を入力しても
//違う日付と判断されてしまいますよ。(秒まで管理しているものが比較対照のため)
//以下のよう少しシンプルに記述することが出来ますよ。
で、問題のところですね。
//フォーマット形式を設定します。
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//Dateクラスに変換したコンソール日付を年月日形式に整形します。
String result1 =sdf.format(myCal.getTime());
Calendar myToday = Calendar.getInstance();
//Dateクラスに変換した現在日付を年月日形式に整形します。
String result2 =sdf.format(myToday.getTime());
if (result1.compareTo(result2)== 0) {
System.out.println("現在日付と同じ日付です。");
}else if (result1.compareTo(result2)> 0){
System.out.println("現在日付よりも後の日付です。");
}else if (result1.compareTo(result2)< 0){
System.out.println("現在日付よりも前の日付です。");
やはり<>=のような比較演算子を使うみたいです。
でも、compareTo()メソッドは初めて知りました。
後、どういう計算で0より大きいのか、小さいのかを表すのかは、未だに分かりません。
before()メソッドとafter()メソッドを使うよりいいんですかね。
分かる方がいましたら、教えて頂けると大変有り難いです。
どうぞ宜しくお願い致します。
後、ソースコードとかで足りない部分がありましたら言って下さい。
その部分は補足のところに書かせてもらいます。
No.1ベストアンサー
- 回答日時:
この問題は「SimpleDateFormat」を勉強した後に
「SimpleDateFormat」を使って解けという問題なのかな?
次のような回答でOKかな?
compareToを使っているif文において
20090101よりも20090201の方が未来である
という判定は
文字列の並び順で
20090101よりも20090201の方が後に来るという
性質を利用して判定しているのだ。
年月日を表している文字列が
あくまで同じ桁数だから、
というのが前提条件だけど。
--ここまで--ここからちょっと愚痴--
勉強としては、正直あまりお勧めできない実装。
まったくオブジェクト指向的じゃないし。
オブジェクト指向的に解決するなら
beforやafterを使うべき。
正直なとこ、こんな問題初心者にやらせるなよと言いたい。
ただ、ひとつの判定の手段として
日付を文字列に置き換えて
文字列の順序の前後の判定を利用する方法もある
と覚えておけばいいよ。
実際良く使われるけどね。
前述したけど、年月日を表している文字列が
同じ桁数だから、というのが前提条件。
で、compareToというメソッドは
オブジェクトに順序を決定づけるための
Comparableインターフェースの持つメソッドだよ。
s1.compareTo(s2) の結果は
0より大きい、0、0より小さいのいずれかで
0より大きい場合、s1はs2より後ろにあるという意味。
0より小さければ、s1はs2より前にあるという意味。
0ならばs1とs2は同じ位置にあるという意味。
Comparableはそのうち勉強するといいよ。
ちなみにbefore,afterはCalendarだけじゃなくDateでもできる。
もちろんDateでcompareToもあるよ。
日付の比較なんだから、こっちがいいね。
まあ、設問じゃ仕方ないけど。
分かりやすい解説をして頂き、感謝します。
意味不明だったのが、askaaskaさんのおかげでこの頭の悪い自分でも理解できました。
納得して理解できるというのは嬉しいもんですね。
しかも、有り難いエールのようなお言葉にまた頑張るぞ!!!という気持ちの高ぶりを感じました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
String型の日付(2005/11/25)の...
-
C# マルチスレッドにおける例外...
-
VBA Evaluate関数 型が一致しま...
-
子プロセスで発生した例外を親...
-
ブックマークレットについて
-
nullで、return出来るのはどん...
-
例外ってIf文の中に入れますか...
-
C++の例外処理について
-
【JAVA】与えられた金額を貨幣...
-
PHPのpack関数をJavaで実装でき...
-
全角スペースのチェックについて
-
「タイプ初期化子が例外をスロ...
-
オープンアプリにおける、テキ...
-
エクセルVBAで、条件に一致する...
-
3年間同じクラスになる確率
-
インスタンス参照でアクセスで...
-
c++,ある関数のクラスから別の...
-
ワイルドカード<?>と型パラメー...
-
「天声人語」をインターネット...
-
DataGridViewでセルクリックイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
VB.Net Object型 空かどうか
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
数字か文字列かを判定する関数
-
例外ってIf文の中に入れますか...
-
C# マルチスレッドにおける例外...
-
スタックオーバーフローとは?
-
String型の日付(2005/11/25)の...
-
Timestamp型への変換について(J...
-
C# UriFormatExceptionの回避
-
VBA Evaluate関数 型が一致しま...
-
ADOによるレコードの追加/更新
-
時間の取得
-
WebClient()以外でネットにアク...
-
C#の捕捉されない例外処理の対...
-
タトゥーや墨を入れる人の共通点
おすすめ情報