Frage

Ok, ich bin auf diesen einen offiziell stapfte. Ich habe ein GregorianCalendar Objekt, das Ich mag würde, um zu bestimmen, ob es in der Vergangenheit, Gegenwart oder Zukunft. Bisher war die Kalender # compareTo docs mir sind verwirrend, dass ich erratische Ergebnisse bin immer. Eine einfache Test Klasse illustriert mein Problem:

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));
        }
}

Und die Ausgabe:

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

Mein Verständnis von compareTo ist, dass die letzte Zeile a -1 sein sollte. Kann mir jemand sagen, was ich falsch mache?

War es hilfreich?

Lösung

Sie haben 6 Monate hinzugefügt datePast, nicht dateFuture. Hier ist der Arbeits Code:

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));
    }
}

Ihre Ergebnisse widersprüchlich gewesen wären, weil manchmal dateFuture später als datePresent sein würde, je nachdem, wann die innere Uhr „abgehakt“.

Zusätzlich zu all dies kann ich nicht helfen, aber meine Standard-Java-Datum und Zeit Ratschläge geben: Verwenden Sie Joda Zeit statt. Es ist nicht verantwortlich für dieses spezielle Problem, obwohl die Tatsache, dass viele der Arten sind unveränderlich wäre geholfen. Aber im Allgemeinen ist es eine viel bessere Bibliothek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top