• ベストアンサー

日付の比較

こんばんは^^ 1) 標題の通り、日付の比較を行いたいのです。 Stringで例えば、「20021207」と「20020601」とか 西暦の年月日をもっているとします。 この2つを比較したいのです。 調べた所では、Dateクラス、Calenderクラスに after()やbefore()のメソッドがあって、それを 使えばいいと言う所までわかりました。 それで、DateクラスのコンストラクタにStringの文字を渡せる のですが、それは推奨されてないみたいで・・・・・。 DateFormatは使い方がいまいちわからなくて。。 どのようにして、Stringの文字列(年月日)をDateやCalender型 に変換して、比較を行えば良いでしょうか?? (簡単なサンプルを見せていただけると助かります) #intに変換して大小を比較する事も出来そうですが、それは #あまりやりたくないので、質問させてもらいました。 #よろしくお願いします。 2) あと、intに変換して比較することと比べて、DateやCalenderクラスの after()やbefore()を使うことによるメリットって何でしょうか?? (あまりメリットはない??) こちらは、興味で追加質問させていただきます。 ご存知の方、ご教示いただけると嬉しく思います。 非常にあつかましいとは思いますが、よろしくお願いします。 #さらに違うやり方などもあれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> DateFormatは使い方がいまいちわからなくて。。 そう? DateFormat df = new SimpleDateFormat("yyyyMMdd"); Date d = df.parse("20021207"); かな。 # 試してません (^^; > あと、intに変換して比較することと比べて、DateやCalenderクラスの > after()やbefore()を使うことによるメリットって何でしょうか?? 日付の表現が、大小関係を保ったまま、一意に整数に変換できるわけではない、と いうことですかね。 もう過ぎちまったことですが、そういうあやふやな前提を置いたプログラムをいっぱい 作っちまったことが 2000年問題(古ぅ)の原因です。 そういったあたりを java に任せておけば、もし、問題が起きても、それに対応した Date クラスを導入するだけで、問題を解決できてしまう。 もし、そうじゃなければ、全てのソースから日付表現の文字列を整数に変換している箇所を 拾い出して、問題が無いコードに置き換えるということをしてゆかなければいけません。 まあ、個人ベースのプログラムであれば、あまり気にすることも無いかもしれませんが。 もうひとつの回答は、「オブジェクトだから」ということかなあ。 あなたのしたいことは、日付の大小関係の比較、なのでしょう。であれば、日付のオブジェクトの 大小関係を使うのが「スジ」ってもんです。

mkim
質問者

お礼

ご回答ありがとうございます。 >DateFormat df = new SimpleDateFormat("yyyyMMdd"); 上記の使い方で良かったんですね。 示してもらうと簡単に思いますが、これが全然思い浮かばなくて! 助かりました。 またDateクラスを使って比較する際の考え方も参考になりました。 確かに何か問題が発生した際に、Dateクラスのオブジェクトの比較を 使用しておけば、対応したDateクラスを導入するだけって所が、 妙に説得力がありました。。。 なるほどですね! 大変助かりました。そしてありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • o84
  • ベストアンサー率31% (128/407)
回答No.1

Calendarクラスにはパブリックコンストラクタは無いので、 コンストラクタからインスタンスを作るのは無理です。 というか、普通はGregorianCalendarクラスを使うと思います。 GregorianCalendarは、コンストラクタからインスタンス生成可能で、 Calendarクラスのメソッドは全部持っています。 文字列ではないですが、intの年月日からインスタンスが作れます。 コンストラクタの例: GregorianCalendar() GregorianCalendar( int year, int month, int day ) これではお求めになっている答えとはやっぱり違うんでしょうが。。。

mkim
質問者

お礼

ご回答ありがとうございます。 GregorianCalendarクラスがあったんですね。 まだまだ勉強不足でした(^^;) GregorianCalendarだと、int型で年・月・日のそれぞれを 渡してインスタンスを生成できちゃうんですねぇ! これもありって言えば、ありですなぁ。 でも、せっかくStringの文字列でデータを持っているので 今回は、DateFormatを使って頑張ってみたいと思います。 勉強になりました。 ありがとうごいました。

すると、全ての回答が全文表示されます。

関連するQ&A