Galera, procurei no fórum mas não encontrei nada que pudesse me ajudar…
O problema é que preciso comparar duas datas…uma armazenada e outra vem do pc (data atual)…
Tentei fazer usando compareTo mas só retorna false…
Alguém poderia me ajudar?
public class Data {
int dia;
int mes;
int ano;
Data(){
Calendar calendario = Calendar.getInstance();
dia = calendario.get(Calendar.DAY_OF_MONTH);
mes = calendario.get(Calendar.MONTH);
ano = calendario.get(Calendar.YEAR);
System.out.println(Feriado(calendario));
}
private String Feriado(Calendar dt){
String entrada="21/04/2012";
String nome= "Tiradentes";
String[] data = entrada.split("\\/");
Calendar folga = Calendar.getInstance();
folga.set(Calendar.DAY_OF_MONTH, Integer.parseInt(data[0]));
folga.set(Calendar.MONTH, Integer.parseInt(data[1]));
folga.set(Calendar.YEAR,Integer.parseInt(data[2]));
if(folga.compareTo(dt)==0){
return "Feriado de "+nome;
}else{
return "Não é feriado";
}
}
Cara, eu comprado dessa forma:
public boolean verificavencimento(Date emissao, Date vencimento){
boolean data;
if (emissao.before(vencimento)){
data = true;
}
else if (emissao.after(vencimento))
data = false;
else
data = true;
return data;
}
Sim, sim mas nesse caso quero saber se é igual
Bom fiz uns testes aqui e mudei o calendario do pc para 21/04/2012, visto que o equals de Date é implementado como o codigo abaixo:
public boolean equals(Object obj) {
return obj instanceof Date && getTime() == ((Date) obj).getTime();
}
Fiz o teste com o codigo abaixo verifique por favor se atende sua dúvida e qualquer coisa poste novamente, se der certo poste também,
Segue abaixo:
[code]package formatacao;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Data {
public static void main(String[] args) {
new Data();
}
int dia;
int mes;
int ano;
Data() {
Calendar calendario = Calendar.getInstance();
dia = calendario.get(Calendar.DAY_OF_MONTH);
mes = calendario.get(Calendar.MONTH);
ano = calendario.get(Calendar.YEAR);
System.out.println(Feriado(calendario));
}
private String Feriado(Calendar dt) {
String entrada = "21/04/2012";
String nome = "Tiradentes";
String[] data = entrada.split("\\/");
Calendar folga = Calendar.getInstance();
folga.set(Calendar.DAY_OF_MONTH, Integer.parseInt(data[0]));
folga.set(Calendar.MONTH, Integer.parseInt(data[1])-1);
folga.set(Calendar.YEAR, Integer.parseInt(data[2]));
SimpleDateFormat df = new SimpleDateFormat("dd/MMMM/yyyy");
System.out.println(df.format(folga.getTime()));
System.out.println(df.format(dt.getTime()));
System.out.println(folga.getTimeInMillis());
System.out.println(dt.getTimeInMillis());
if (folga.getTime().equals(dt.getTime())) {
return "Feriado de " + nome;
} else {
return "Não é feriado";
}
}
}
[/code]
para comparar dois Calendar se são iguais você pode usar equals… se uma de suas datas estáno formato string você pode passar para date com DateFormat e de date para Calendar criando um Calendar e passado seu Date no método setTime desse Calendar… até tem um método “set” que recebe 3 inteiros para dia mês e ano mas se você tem api para isso ficar separando string por barra, transformando em inteiro… enfim me parece meio ruim…
E lembre-se que os meses começam em 0 sendo assim tem ajuste la na data para o mes 4(maio) ficando para abril 4-1.
Agora para comparar Calendar pelo que vi no javaDoc do proprio método sobrescrito creio que deva usar compareTO repare no java Doc abaixo:
/**
* Compares this <code>Calendar</code> to the specified
* <code>Object</code>. The result is <code>true</code> if and only if
* the argument is a <code>Calendar</code> object of the same calendar
* system that represents the same time value (millisecond offset from the
* <a >Epoch</a>) under the same
* <code>Calendar</code> parameters as this object.
*
* <p>The <code>Calendar</code> parameters are the values represented
* by the <code>isLenient</code>, <code>getFirstDayOfWeek</code>,
* <code>getMinimalDaysInFirstWeek</code> and <code>getTimeZone</code>
* methods. If there is any difference in those parameters
* between the two <code>Calendar</code>s, this method returns
* <code>false</code>.
*
* <p>Use the {@link #compareTo(Calendar) compareTo} method to
* compare only the time values.
*
* @param obj the object to compare with.
* @return <code>true</code> if this object is equal to <code>obj</code>;
* <code>false</code> otherwise.
*/
Use compareTo(Calendar)compareTo method to compare only the time values.
Putz agora deu certo…O problema estava no mês pois ele começa contando do 0 (zero), ou seja sempre estava um mês a frente…Vlw Galera…
Foi só alterar essa linha colocando o -1
folga.set(Calendar.MONTH, Integer.parseInt(data[1])-1);
Bom para finalizar estava vendo aqui a respeito se fosse usar o compareTO apenas com calendar…
Desta forma não se esqueça de zerar os segundos milisegundos e hora se não o resultado fica inconsistente segue abaixo como seria…
package formatacao;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Data {
public static void main(String[] args) {
new Data();
}
int dia;
int mes;
int ano;
Data() {
Calendar calendario = Calendar.getInstance();
calendario.set(Calendar.HOUR, 0);
calendario.set(Calendar.MINUTE,0);
calendario.set(Calendar.SECOND, 0);
calendario.set(Calendar.MILLISECOND,0);
dia = calendario.get(Calendar.DAY_OF_MONTH);
mes = calendario.get(Calendar.MONTH);
ano = calendario.get(Calendar.YEAR);
System.out.println(Feriado(calendario));
}
private String Feriado(Calendar dt) {
String entrada = "21/04/2012";
String nome = "Tiradentes";
String[] data = entrada.split("\\/");
Calendar folga = Calendar.getInstance();
folga.set(Calendar.DAY_OF_MONTH, Integer.parseInt(data[0]));
folga.set(Calendar.MONTH, Integer.parseInt(data[1])-1);
folga.set(Calendar.YEAR, Integer.parseInt(data[2]));
folga.set(Calendar.HOUR, 0);
folga.set(Calendar.MINUTE,0);
folga.set(Calendar.SECOND, 0);
folga.set(Calendar.MILLISECOND,0);
if(dt.compareTo(folga)==0){
return "feriado";
}else{
return "não é feriado";
}
}
}
por favor edite o post e coloque [Resolvido]