Pregunta

Ok, estoy perplejo oficialmente en este caso. Tengo un objeto GregorianCalendar que me gustaría para determinar si está en el pasado, presente o futuro. Hasta ahora, el docs Calendario # compareTo están confundiendo a mí, en la que estoy recibiendo resultados erráticos. Una clase simple prueba ilustrar mi problema:

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

Y la salida:

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

Mi comprensión de compareTo es que la última línea debe ser un -1. ¿Puede alguien decirme lo que estoy haciendo mal?

¿Fue útil?

Solución

Ha añadido 6 meses a datePast, no dateFuture. Aquí está el código de trabajo:

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

Sus resultados hubieran sido inconsistente porque a veces dateFuture sería más tardar datePresent, dependiendo de cuando el reloj interno "marcada".

Además de todo esto, no puedo dejar de dar mi fecha y hora de Java consejo estándar: use Joda Time lugar. No es responsable para este problema concreto, aunque el hecho de que muchos de los tipos son inmutables habría ayudado. Pero en general se trata de un más mejor biblioteca.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top