Comparação de Datas
Oi amigos,
Preciso comparar se uma data dd/mm/aaaa é maior que a data atual.
ou maior que uma data X...
Alguém?
Andréa Martins
Curtidas 0
Respostas
Rafael Afonso
09/04/2009
Olá:
Use o [url=http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html#after(java.util.Date)]after()[/url], [url=http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html#before(java.util.Date)]before()[/url], [url=http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html#compareTo(java.util.Date)]compareTo()[/url] (recomendado) ou o [url=http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html#equals(java.lang.Object)]equals()[/url].
Grato,
GOSTEI 0
Rafael Afonso
09/04/2009
Pode dar exemplo???
se possível no formato dd/mm/aaaa...
obrigada
GOSTEI 0
Rafael Afonso
09/04/2009
[quote="Andréa Martins"]Pode dar exemplo???
se possível no formato dd/mm/aaaa...
obrigada
Olá:
É um objeto Date ou uma String com uma data?
Caso seja a primeira opção leia [url=http://javaalmanac.com/egs/java.util/CompDates.html]este exemplo[/url].
Se for o segundo caso, então converte as Strings em Datas, usando o java.text.DateFormat.
Grato,
GOSTEI 0
Rafael Afonso
09/04/2009
Andréa..
A classe Date tem comparações que podem ser feitas direta pelos métodos...
Como o Rafael disse...
Se você precisar passar de String para Date, utilize o [url=http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html]SimpleDateFormat[/url]
Exemplo:
...
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date minhaData = format.parse("12/05/2004");
if (minhaData.after(new Date()) {
// Ainda vai acontecer o dia
} else if (minhaData.before(new Date()) {
// O dia já aconteceu
}
GOSTEI 0
Rafael Afonso
09/04/2009
Sei disso gente e agradeço a ajuda dada até agora...
criei uma classe que faz o que quero, mais estou com dificuldade de setar a hora, o minuto e o segundo.
Fiz uma Classe DateUtil com dois métodos comparaDatas. Um passando duas Strings e o outro uma String e um Date:
Quando passo duas Strings da certo pois faço a formatação e a comparação com after e before. Hora, minuto e segundo são nulas ou vazias ou 0 (sei lá) para as duas
No segundo caso (e que eu precisarei usar com mais frequência), estarei comparando uma string no formato (ddmmaaaa) que vem como parâmetro e a data atual.
O que faço:
Instancio dois objetos Calendar,
O problema é que se hoje é dia 23 de maio de 2004 e eu tenho uma String 23052004, não consigo fazer o que quero porque Data sempre será maior que priData pois esse metodo leva em consideração a hora, minuto e segundo.
PS.: diminui 1 do mês
O que eu tentei fazer é setar a hora, minuto e segundo de Data para 0, mas não consigo..
Na verdade, a comparação das horas não me interessa apenas do dia, mes e ano...
Tô correndo atrás lendo a API, mas se alguém puder me dar uma luz ou sugestão melhor,,,
Agradeço muiiiito :lol:
Beijos,
Andréa
// essa é para a String
Calenda priData = Calendar.getInstance();
priDate.set(... substrings correspondentes para ano, mes e dia)
// para pegar o dia de hoje
Calenda Data = Calendar.getInstance();
GOSTEI 0
Rafael Afonso
09/04/2009
Andréa:
Acho, de novo, que seria bom você usar o DateFormat:
Como vê, não há necessidade de usar Calendar.
Grato,
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Date data1 = format.parse(string1); // Data no formato "yyyyMMdd"
Date data2 = format.parse(string2); // Data no formato "yyyyMMdd"
if (data1.after(data2)) {
// ...
} else if (data1.before(data2)) {
// ...
}
GOSTEI 0
Rafael Afonso
09/04/2009
caros amigos.....
estou tentando comprar duas datas... tbm...
so que
tipo usando after....... ele usa apenas o '>'
o before '<'
o compareTo retorna
eu nao sei a regra ppro compareTo....Tenho que achar um metodo que me retorne True por exemplo se uma Data for menor ou igual a outra Data.
GOSTEI 0
Rodério Kunz
09/04/2009
Veja se isso ajuda....
Valew.
import java.text.*;
import javax.swing.*;
import java.util.*;
public class Student {
public static void main(String[] args) {
Function obj = new Function();
obj.entrada();
}
}
class Function {
JTextArea tela = new JTextArea();
String dataNasc = "";
int idade = 0;
public void entrada() {
dataNasc = JOptionPane
.showInputDialog("Informe a data de nasc no formato ddmmyyyy:");
tela.append("A sua idade eh:\n" + Idade(dataNasc));
tela.append("\nMês do Niver:\n" + dataNasc.substring(2, 4));
tela.append("\n\nSão Paulo, " + Tempo());
JOptionPane.showMessageDialog(null, tela);
}
public static int Idade(String dtNasc) {
Date dt = null;
SimpleDateFormat temp = new SimpleDateFormat("ddMMyyyy");
try {
dt = temp.parse(dtNasc);
} catch (Exception e) {
e.printStackTrace();
}
Calendar dtNiver = new GregorianCalendar();
dtNiver.setTime(dt);
Calendar dtHoje = Calendar.getInstance();
int idade = dtHoje.get(Calendar.YEAR) - dtNiver.get(Calendar.YEAR);
dtNiver.add(Calendar.YEAR, idade);
if (dtHoje.before(dtNiver)) {
idade--;
}
return idade;
}
public static String Tempo() {
return new SimpleDateFormat("dd/MM/yyyy HH:mm").format(new Date());
}
}
GOSTEI 0
Daniel C.
09/04/2009
Apesar de ser um tópico antigo, já que este tópico me ajudou... posto o meu cód. que talvez ajude mais alguem.
/**
* Converte uma String para um objeto Date. Caso a String seja vazia, nula ou inválida,
* retorna null. ex: de inválidas (31/02/2009), (01/01/09),
* @param data String no formato dd/MM/yyyy a ser formatada
* @return Date Objeto Date ou null caso receba uma String vazia ou nula
* @throws Exception Caso a String esteja no formato errado
*/
public static Date StringParaDate(String data){
if (data == null || data.equals(""))
return null;
try {
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
formatter.setLenient(false); //se tolerancia se a data for inválida retorna erro ex:31/02/2009
Date dataMinima = formatter.parse("01/01/1880");
Date dataMaxima = formatter.parse("31/12/2500");
Date dataParam = formatter.parse(data);
//comparando período válido
if ((dataParam.before(dataMinima))||(dataParam.after(dataMaxima))){
return null;
}else{
return dataParam;
}
} catch (ParseException e) {
return null;
}
}
GOSTEI 0