Existem várias maneiras de comparar datas Java. Internamente, uma data é representada como um ponto (longo) no tempo - o número de milissegundos decorridos desde 1º de janeiro de 1970. Em Java, Date é um objeto, o que significa que inclui vários métodos de comparação. Qualquer método de comparação de duas datas irá essencialmente comparar os horários das datas.
Passos
Método 1 de 4: usando compareTo
Etapa 1. Use compareTo
Date implementa Comparable e, portanto, duas datas podem ser comparadas diretamente com o método compareTo. Se as datas forem para o mesmo ponto no tempo, o método retornará zero. Se a data que está sendo comparada for anterior ao argumento da data, um valor menor que zero será retornado. Se a data que está sendo comparada for posterior ao argumento de data, um valor maior que zero será retornado. Se as datas forem iguais, o valor 0 será retornado.
Etapa 2. Crie os objetos de data
Você precisará criar cada objeto de data antes de começar a compará-los. Uma maneira de fazer isso é usar a classe SimpleDateFormat. Ele permite a entrada fácil de valores de data em objetos de data.
SimpleDateFormat sdf = new SimpleDateFormat ("aaaa-MM-dd"); // Para declarar valores em novos objetos de data. use o mesmo formato de data ao criar datas Date date1 = sdf.parse ("1995-02-23"); // data1 é 23 de fevereiro de 1995 Data date2 = sdf.parse ("2001-10-31"); // data2 é 31 de outubro de 2001 Data date3 = sdf.parse ("1995-02-23"); // data 3 é 23 de fevereiro de 1995
Etapa 3. Compare os objetos de data
O código abaixo mostrará cada caso - menor que, igual e maior que.
date1.compareTo (date2); // data1 <data2, retorna menos que 0 date2.compareTo (data1); // data2> data1, retorna maior que 0 date1.compareTo (data3); // data1 = data3, então imprimirá 0 no console
Método 2 de 4: usando igual, depois e antes
Etapa 1. Use igual, antes e depois
As datas podem ser comparadas com os métodos igual, posterior e anterior. Se duas datas forem para o mesmo ponto no tempo, o método equals retornará verdadeiro. Os exemplos usarão datas criadas anteriormente a partir do método compareTo.
Etapa 2. Compare usando o método anterior
O código abaixo mostra um caso verdadeiro e falso. Se data1 for anterior a data2, antes de retornará verdadeiro. Se não for, o before retorna false.
System.out.print (date1.before (date2)); // imprime true System.out.print (date2.before (date2)); // imprime falso
Etapa 3. Compare usando o método depois
O código abaixo mostra um caso verdadeiro e falso. Se data2 for posterior a data1, after retornará verdadeiro. Se não for, o after retorna false.
System.out.print (date2.after (date1)); // imprime true System.out.print (date1.after (date2)); // imprime false
Etapa 4. Compare usando o método de igualdade
O código abaixo mostra um caso verdadeiro e falso. Se as datas forem iguais, igual retorna verdadeiro. Se não forem, igual retorna falso.
System.out.print (date1.equals (date3)); // imprime true System.out.print (date1.equals (date2)); // imprime false
Método 3 de 4: usando a classe Calendar
Etapa 1. Use o calendário
A classe calendar também possui métodos compareTo, equals, after e before que funcionam da mesma maneira que a descrita acima para a classe date. Portanto, se a informação de data estiver em um calendário, não há necessidade de extrair a data apenas para fazer uma comparação.
Etapa 2. Crie instâncias do Calendário
Para usar os métodos do Calendário, você precisará de algumas instâncias do Calendário. Felizmente, você pode simplesmente obter os tempos das instâncias de Date já criadas.
Calendário cal1 = Calendar.getInstance (); // declara cal1 Calendar cal2 = Calendar.getInstance (); // declara cal2 Calendar cal3 = Calendar.getInstance (); // declara cal3 cal1.setTime (date1); // aplica a data a cal1 cal2.setTime (date2); cal3.setTime (date3);
Etapa 3. Compare cal1 e cal2 usando antes
O código a seguir deve imprimir true, pois cal1 é anterior a cal2.
System.out.print (cal1.before (cal2)); // imprimirá verdadeiro
Etapa 4. Compare cal1 e cal2 usando after
O código a seguir deve imprimir falso, pois cal1 é anterior a cal2.
System.out.print (cal1.after (cal2)); // imprime falso
Etapa 5. Compare cal1 e cal2 usando iguais
O código a seguir mostrará um exemplo de caso verdadeiro e falso. A condição depende das instâncias de calendário que estão sendo comparadas. O código deve imprimir "verdadeiro" e "falso" na próxima linha.
System.out.println (cal1.equals (cal3)); // imprime verdadeiro: cal1 == cal3 System.out.print (cal1.equals (cal2)); // imprime falso: cal1! = cal2
Método 4 de 4: usando getTime
Etapa 1. Use getTime
Também é possível comparar diretamente o ponto no tempo de duas datas, embora qualquer uma das abordagens anteriores provavelmente seja mais legível e, portanto, preferível. Esta será uma comparação de dois tipos de dados primitivos, portanto, pode ser feita com "" e "==".
Etapa 2. Crie os objetos de longa duração
Antes de comparar as datas, você deve criar inteiros longos com os dados dos objetos Date criados anteriormente. Felizmente, o método getTime () fará a maior parte do trabalho para você.
longo tempo1 = getTime (data1); // declara o tempo1 primitivo de data1 longo tempo2 = getTime (data2); // declara o tempo2 primitivo de data2
Etapa 3. Faça uma comparação inferior
Use o símbolo de menor que (<) para comparar esses dois valores inteiros. Como o tempo1 é menor que o tempo 2, a primeira mensagem deve ser impressa. A instrução else está incluída para uma sintaxe adequada.
if (hora1 <hora2) {System.out.println ("data1 é anterior à data2"); // será impresso desde hora1 <hora2} else {System.out.println ("a data1 não é anterior à data2"); }
Etapa 4. Faça uma comparação maior do que
Use o símbolo maior que (>) para comparar esses dois valores inteiros. Como o tempo1 é maior que o tempo 2, a primeira mensagem deve ser impressa. A instrução else está incluída para uma sintaxe adequada.
if (time2> time1) {System.out.println ("date2 is after date1"); // imprimirá desde hora2> hora1} else {System.out.println ("a data2 não é posterior à data1"); }
Etapa 5. Faça uma comparação de igual
Use o símbolo para verificar a igualdade (==) para comparar a igualdade desses dois valores inteiros. Como time1 é igual a time3, a primeira mensagem deve ser impressa. Se o programa chegar à instrução else, isso significa que os tempos não são iguais.
if (time1 == time2) {System.out.println ("as datas são iguais"); } else {System.out.println ("as datas não são iguais"); // imprimirá desde time1! = time2}