Comparar datas

12 respostas
R

Boa noite!!!

Estou tentando comparar duas datas, uma a data de hoje e outra uma data qualquer. Fiz um codigo pegando alguma coisa na net mas nem sempre da certo. Alguem poderia tentar acertar o codigo ou me passar uma outra maneira de fazer

Calendar dataatual = new GregorianCalendar();
    String d = "20091019";

    SimpleDateFormat formdata = new SimpleDateFormat("yyyyMMdd");
    String dataatual2 = formdata.format(dataatual.getTime());
    java.util.Date data;
    java.util.Date data2;
    try {
        data = (formdata.parse(d));
        Calendar vencimento = new GregorianCalendar();
        vencimento.setTime(data);

        data2 = (formdata.parse(dataatual2));
        Calendar hoje = new GregorianCalendar();
        hoje.setTime(data2);
        // Get difference in milliseconds
        
        long difMillis =   vencimento.getTimeInMillis() - hoje.getTimeInMillis();

        // Dif. em segundos
        long difSeg = difMillis / (1000);

        // Dif. em minutos
        long difMin = difMillis / (60 * 1000);        

        // Dif. em horas
        long difHor = difMillis / (60 * 60 * 1000);

        // Dif. em dias
        long difDia = difMillis / (24 * 60 * 60 * 1000);

        JOptionPane.showMessageDialog(null, difDia);

    } catch (ParseException ex) {
        Logger.getLogger(ContasReceber.class.getName()).log(Level.SEVERE, null, ex);
    }

12 Respostas

A

se é somente a data e não há inclusão nem nada, de um parâmetro para a inserção da data e faça uma comparação entre Strings;

você colocou o simpleDateFormat, ele é quem vai te ajudar mais, coloque o valor da data em uma variavel e compare.

String dataAgora();
String dataDigitada();

if (dataDigitada().equals(dataAgora()){

.... sua condição ....

} else {

.... caso você queira um outro valor ....

}

espero que isso te ajude.

T+

R

é que preciso saber quantos dias tem entre uma data e outra. Neste codigo que fiz ele as vezes da diferença de um dois dias

Y

o que exatamente voce esta querendo fazer? Se for so saber se a data é maior ou menor usa:

if (data.after(outraData)) fazAlgumaCoisa();
    if (data.before(outraData))  fazAlgumaCoisa();
    if (data.equals(outraData)) fazAlgumaCoisa();
R

Bem, preciso pegar a data do dia e uma data de vencimento, então ver se ja venceu, se venceu quantos dias faz que venceu e então vou calcular os juros

R

Acertei, o problema estava na divisão que quando não dava exata ficava com um dia a menos. Agora ficou assim e a principio esta funcionando

Calendar dataatual = new GregorianCalendar();
        String d = "20090901";

        SimpleDateFormat formdata = new SimpleDateFormat("yyyyMMdd");
        String dataatual2 = formdata.format(dataatual.getTime());
        java.util.Date data;
        java.util.Date data2;
        try {
            data = (formdata.parse(d));
            Calendar vencimento = new GregorianCalendar();
            vencimento.setTime(data);

            data2 = (formdata.parse(dataatual2));
            Calendar hoje = new GregorianCalendar();
            hoje.setTime(data2);
            // Get difference in milliseconds
            
            long difMillis =   vencimento.getTimeInMillis() - hoje.getTimeInMillis();
           
            // Dif. em segundos
            long difSeg = difMillis / (1000);

            // Dif. em minutos
            long difMin = difMillis / (60 * 1000);        

            // Dif. em horas
            long difHor = difMillis / (60 * 60 * 1000);
            long teste1 = difHor % 24;

             // Dif. em dias
            long difDia = difMillis / (24 * 60 * 60 * 1000);
            long teste = 0;
            if (teste1 > 0){
                teste = difDia + 1;
            }else{
                teste = difDia;
            }

            JOptionPane.showMessageDialog(null,teste);

        } catch (ParseException ex) {
            Logger.getLogger(ContasReceber.class.getName()).log(Level.SEVERE, null, ex);
        }
B

Parece que para ser programador Java, a pessoa tem que ser masoquista também. Nunca vi gostar de sofrer tanto.

Dê uma olhada nisto:
import javax.swing.JOptionPane;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class CalculaPeriodo {

    public static void main(String[] args) {

        DateTimeFormatter fmt = DateTimeFormat.forPattern("ddMMyyyy");

        String s = JOptionPane.showInputDialog("Digita a data no formato ddMMyyyy");

        DateTime vencimento = fmt.parseDateTime(s);
        DateTime agora = new DateTime();

        Days dias = Days.daysBetween(vencimento, agora);
        
        String mensagem = "Já se passaram " + dias + " desde " + vencimento;

        JOptionPane.showMessageDialog(null, mensagem);

    }
}
http://joda-time.sourceforge.net/index.html
R

Bem ainda não consegui chegar em um bom nivel de programação mas estou tentando. Com relação ao codigo que voce me passou não deu certo, nem os imports funcionou

fjvasconcellos

Boa noite.

Bruno Laturner, boa API para se trabalhar com Datas, não sabia desta não…

Vlw cara…

pedroroxd

rpassos81:
Bem ainda não consegui chegar em um bom nivel de programação mas estou tentando. Com relação ao codigo que voce me passou não deu certo, nem os imports funcionou

Isso se dá ao fato da sua classe provavelmente não chamar CalculaPeriodo como a dele.
Clique no projeto, crie uma nova classe, e de o nome dela de CalculaPeriodo.
Pegue o código dele, de ctrlc e ctrl v e mande rodar.
A API utilizada por ele é muito boa, e seria um jeito mais fácil de fazer…

O seu jeito não está errado… Aliás, não existe jeito certo… O jeito certo é o que você sabe fazer 8)

R

Não consegui importar

import org.joda.time.DateTime;

import org.joda.time.Days;

import org.joda.time.format.DateTimeFormat;

import org.joda.time.format.DateTimeFormatter;

da que não exite.

fjvasconcellos

Vc não vai conseguir importar as classes que ele usa, se não fizer o download da API no link que ele disponibilizou e adicionar em seu projeto.

Tenta ai.

R

Beleza valeu!!!

Criado 29 de setembro de 2009
Ultima resposta 1 de out. de 2009
Respostas 12
Participantes 6