アプリ版:「スタンプのみでお礼する」機能のリリースについて

実は、
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()メソッドを使うよりいいんですかね。
分かる方がいましたら、教えて頂けると大変有り難いです。
どうぞ宜しくお願い致します。
後、ソースコードとかで足りない部分がありましたら言って下さい。
その部分は補足のところに書かせてもらいます。

A 回答 (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もあるよ。
日付の比較なんだから、こっちがいいね。
まあ、設問じゃ仕方ないけど。
    • good
    • 0
この回答へのお礼

分かりやすい解説をして頂き、感謝します。
意味不明だったのが、askaaskaさんのおかげでこの頭の悪い自分でも理解できました。
納得して理解できるというのは嬉しいもんですね。
しかも、有り難いエールのようなお言葉にまた頑張るぞ!!!という気持ちの高ぶりを感じました。

お礼日時:2009/02/17 04:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!