Pergunta

Ok, estou oficialmente perplexo sobre este. Eu tenho um objeto GregorianCalendar que eu gostaria de determinar se ele está no passado, presente ou futuro. Até agora, a docs Calendário # compareTo são confusas para mim, em que estou obtendo resultados erráticos. A classe simples teste irá ilustrar o meu 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));
        }
}

E a saída:

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

O meu entendimento de compareTo é que a última linha deve ser a -1. Alguém pode me dizer o que estou fazendo de errado?

Foi útil?

Solução

Você adicionou 6 meses a datePast, não dateFuture. Aqui está o código de trabalho:

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

Seus resultados teriam sido inconsistentes, porque às vezes dateFuture seria mais tarde do que datePresent, dependendo de quando o relógio interno "marcada".

Além de tudo isso, eu não posso ajudar, mas dar a minha data de Java padrão e aconselhamento tempo: uso Joda Tempo . Não é responsável por este problema específico, embora o fato de que muitos dos tipos são imutáveis ??teria ajudado. Mas, em geral, é uma muito melhor biblioteca.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top