- ベストアンサー
ある日付の前(後)の月かどうかを調べる方法
ある日付が、ある日付の前(後)の月かどうかを調べる方法を 知りたいのですが・・↓ 1.日付を表すjava.sql.Dateオブジェクト-その1 2.日付を表すjava.sql.Dateオブジェクト-その2 1が2より前の月かどうか 1が2より後の月かどうか を調べる方法を教えて下さい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
とおもったらいろいろ間違えてました。 cal.set(2002,12-1,29); //これは2002年12月29日 ですね。 しかも private static int compareDate(Date d1, Date d2) { Calendar cal1 = GregorianCalendar.getInstance(); cal1.setTime(d1); int n = cal1.get(Calendar.MONTH); cal1.setTime(d2); int m = cal1.get(Calendar.MONTH); return (n - m<0?n-m+12:n-m); } } とするべきでしたね。 でも年の繰り下がりとか繰り上がりとかきにしなくて大丈夫なんですか?
その他の回答 (3)
- chi-kon
- ベストアンサー率43% (58/132)
cal.set(2003,1-1,29); //これは2003年1月29日 cal.set(2002,12-1,29); //これは2002年11月29日 だから-11がもどってくるのはしょうがないですね。 仕様的には年は関係なく月の差だけでよいのでしたら 差がマイナスのときは12を足せばよいのではないでしょうか?
- chi-kon
- ベストアンサー率43% (58/132)
失礼しました。 質問の意味を早とちりしてしまいました。 ただの前後関係じゃないのですね。 下の方法なんかどうでしょうか? public class CompDate { public static void main(String[] args) { Calendar cal = GregorianCalendar.getInstance(); cal.set(2003,7-1,29); Date d1 = cal.getTime(); cal.set(2003,6-1,29); Date d2 = cal.getTime(); System.out.println(d1.toString()); System.out.println(d2.toString()); int n = compareDate(d1, d2); System.out.println(n); } private static int compareDate(Date d1, Date d2) { Calendar cal1 = GregorianCalendar.getInstance(); cal1.setTime(d1); int n = cal1.get(Calendar.MONTH); cal1.setTime(d2); int m = cal1.get(Calendar.MONTH); return n - m; } }
- chi-kon
- ベストアンサー率43% (58/132)
java.sql.Dateはjava.util.Dateのサブクラスなので java.util.DateのAPIをみてください。 そのままのっています。
補足
ご回答ありがとうございます。 前の月かどうかを取得するメソッドって探しても見つからなかったのですが どれになるのでしょうか・・ (前の日付かどうかを取得するメソッドはあったのですが・・。) 例えば、5/10と5/20を比べた時、 「5/10は5/20よりも前の日にちかどうか」ではなく、 「5/10は5/20よりも前の月かどうか」を調べたいです。 5/10と5/20を比較した結果、 <1>5/10は5/20よりも前の日付 <2> 5/10は5/20よりも前の月ではない(同じ月である) 1ではなく、2を取得したいのです。 もし何かメソッドがあれば具体的に教えて頂けないでしょうか・・。 自分でjava.util.Dateとjava.sql.Dateを調べてみたのですが わからなったので・・。申し訳ありません。
補足
compareDateメソッドに、以下の日付をセットした場合 どちらも戻値が「1」になるはずですが、 2の場合は「-11」となってしまいました・・。 1. cal.set(2003,7-1,29); cal.set(2003,6-1,29); 2. cal.set(2003,1-1,29); cal.set(2002,12-1,29); 自力で直せないので、度々申し訳ありませんが できれば年がまたがっても、正しく取得できる方法を 教えて頂けないでしょうか・・。 何度もお手数おかけしてすみません。