質問

OK、私は正式にこれで困っています。GregorianCalendar オブジェクトがあり、それが過去、現在、未来のいずれであるかを判断したいと考えています。これまでのところ、 カレンダー#比較先 不安定な結果が得られるため、ドキュメントは私にとって混乱を招きます。簡単なテストクラスで私の問題を説明します。

import java.util.Calendar;
import java.util.GregorianCalendar;
public class MyCal
{

        public static void main( String[] args )
        {
                GregorianCalendar datePast = new GregorianCalendar();
                datePast.add(Calendar.MONTH, -6); // subtract 6 months
                GregorianCalendar datePresent = new GregorianCalendar();
                GregorianCalendar dateFuture = new GregorianCalendar();
                datePast.add(Calendar.MONTH, 6); // add 6 months

                System.out.println("compare datePresent to datePast: "+datePresent.compareTo(datePast));
                System.out.println("compare datePresent to datePresent: "+datePresent.compareTo(datePresent));
                System.out.println("compare datePresent to dateFuture: "+datePresent.compareTo(dateFuture));
        }
}

そして出力:

compare datePresent to datePast: 1
compare datePresent to datePresent: 0
compare datePresent to dateFuture: 0

CompareTo についての私の理解は、最後の行は -1 でなければならないということです。誰か私が間違っていることを教えてもらえますか?

役に立ちましたか?

解決

6 か月追加されました datePast, 、 ない dateFuture. 。動作するコードは次のとおりです。

import java.util.Calendar;
import java.util.GregorianCalendar;
public class MyCal
{

    public static void main( String[] args )
    {
        GregorianCalendar datePast = new GregorianCalendar();
        datePast.add(Calendar.MONTH, -6); // subtract 6 months
        GregorianCalendar datePresent = new GregorianCalendar();
        GregorianCalendar dateFuture = new GregorianCalendar();
        dateFuture.add(Calendar.MONTH, 6); // add 6 months

        System.out.println("compare datePresent to datePast: "+datePresent.compareTo(datePast));
        System.out.println("compare datePresent to datePresent: "+datePresent.compareTo(datePresent));
        System.out.println("compare datePresent to dateFuture: "+datePresent.compareTo(dateFuture));
    }
}

結果は矛盾したものになるでしょう。 時々 dateFuture より遅くなります datePresent, 、内部時計がいつ「時を刻む」かに応じて。

これらすべてに加えて、私は標準的な Java 日時に関するアドバイスを与えずにはいられません。使用 ジョーダタイム その代わり。これはこの特定の問題の原因ではありませんが、型の多くが不変であるという事実は役に立ちます。しかし、一般的には、 多くの より良い図書館。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top