- ベストアンサー
入力した年月日が過去か現在か未来かを表示するプログラム
- 「SimpleDateFormat」クラスを活用して入力した年月日が過去か現在か未来かを判断するプログラムを作成する方法についての質問です。
- 添削問題の解答では、フォーマット形式を設定して入力日付と現在日付を比較し、比較結果に応じて結果を表示します。
- 比較には「compareTo()」メソッドを使い、0より大きい場合は後の日付、0の場合は同じ日付、0より小さい場合は前の日付と判断します。
- みんなの回答 (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さんのおかげでこの頭の悪い自分でも理解できました。 納得して理解できるというのは嬉しいもんですね。 しかも、有り難いエールのようなお言葉にまた頑張るぞ!!!という気持ちの高ぶりを感じました。