Data e subtração de data

Boa tarde a todos,

Tenho que fazer um exercicio aqui que é sobre emprestimo o usuario digita a data de quando venceu a parcela, o valor da parcela e o juros e tem que retornar o valor que sera pago.

Para pegar a data atual está tranquilo, entretanto para a data do vencimento tem alguma maneira mais facil de fazer do que o usuario digitar o dia, depois o mes e depois o ano e eu ir validando (mes com 31 dias e tal) e depois subtrair a data atual do vencimento para achar o numero de dias e depois somar os juros???

O vencimento cai sempre no mesmo mês?
Se for, vc pode fazer algo parecido com isso:

        public Date diasAposVencimento(int diaVencimento) {
        Locale myLocale = Locale.getDefault();
        Calendar dataAtual = Calendar.getInstance(myLocale);
        dataAtual.add(Calendar.DATE, -diaVencimento);
        return dataAtual.getTime();
        }

Tem sim!!!

Java dispõe de duas classes para isso Date e Calendar. A primeira está depreciada o que significa que seu uso deve ser evitado. A segunda vamos dá uma olhadinha nela:
Para utilizar os recursos desta classe você não precisa instancia objetos dela diretamente pois ela dispõe de um método estático chamado getInstance() que faz esse serviço pra gente. Veja como é mamão com açucar:

Calendar data = Calendar.getInstance();

Agora é só correr pro abraço. Com essa instancia em nossas mãos podemos visualizar bilhões de informações relacionadas a hora e data mundial.
Vamos ao seu problema: Você quer obter a data (dia/mes) mas vamos além. Vou te dar dia/mes/ano:
Sim!!! Bora pegar a hora também, vai que a prestação já se venceu a 3 segundos atráz. Tem que ser cobrado o juros também!!!

OBTENDO A HORA

package ifpb.ads.cajazeiras.pb;

import java.util.Calendar;

public class Main {

    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        int hora = calendar.get(Calendar.HOUR_OF_DAY);
        int minuto = calendar.get(Calendar.MINUTE);
        String horaFormatada = hora + ":" + minuto;
        System.out.println("Hora atual .: " + horaFormatada);
    }
}

Veja que é bem simples. Pagamos a instânica de Calendar(no nosso caso ela se chama calendar) e chamamos o seu método get(int parametro) que pede um inteiro como parâmetro. Chamamos esse método e pedimos para ele a hora(Calendar.HOUR_OF_DAY) do dia e o minuto atual desta hora (Calendar.MINUTE) e ele nos retorna um outro inteiro que é o que procuramos.

OBTENDO A DATA

package ifpb.ads.cajazeiras.pb;

import java.util.Calendar;

public class Main {

    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        int dia = calendar.get(Calendar.DAY_OF_MONTH);
        int mes = calendar.get(Calendar.MONTH);
        int ano = calendar.get(Calendar.YEAR);
        String dataFormatada = dia+"/"+mes+"/"+ano;
        System.out.println("Data de Hoje .: " + dataFormatada);
    }
}

Eu não vou nem mais explicar nada acho que deu pra entender né?!! Segue o mesmo raciocínio de obter a hora.
Simples não!!! Java é o cão…

[quote=rafinha_ft9]Boa tarde a todos,

Tenho que fazer um exercicio aqui que é sobre emprestimo o usuario digita a data de quando venceu a parcela, o valor da parcela e o juros e tem que retornar o valor que sera pago.

Para pegar a data atual está tranquilo, entretanto para a data do vencimento tem alguma maneira mais facil de fazer do que o usuario digitar o dia, depois o mes e depois o ano e eu ir validando (mes com 31 dias e tal) e depois subtrair a data atual do vencimento para achar o numero de dias e depois somar os juros???

[/quote]

Pô foi mal!!! Eu não li tua dúvida direito.
Você quer que a data de vencimento não seja validada no momento que o usuário tá digitando ela, certo?
Qual o tempo de vencimento da parcela? um mês, dois, três como é?
No momento que você vai cadastrar um empréstimo a data é informada ou ela a data atual?

Conhece a API Joda time ?
Excelente para manipulação de datas.

Creio que será muito útil para sua necessidade.
Abraços.

A data do vencimento pode ser de um mes atras ou não, não ha uma data limite,
eu achei em o usuario digita a data do vencimento (Sring) e depois converto para o formato dd/mm/aaaa
ai fica mais facil,
espero

Eu fiz o seguinte:

    public void dataAtual() {
        Date data = new Date();
        dia = data.getDate();
        mes = data.getMonth();
        ano = data.getYear();
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        DateFormat da = DateFormat.getDateInstance();
        String hoje = da.format(data);
        JOptionPane.showMessageDialog(null, "Data atual: " + formato.format(data), "Data atual", 3);
    }

    public void dataVencimento() {
        vencimento = JOptionPane.showInputDialog("Vencimento do emprestimo");
        Date data2 = new Date(vencimento);
        DateFormat dv = DateFormat.getDateInstance();
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        JOptionPane.showMessageDialog(null, "Data vencimento: " + formato.format(data2), "Data do vencimento", 3);
    }

Agora to pensando em jogar as dadas para segundo, ou algo do tipo

Amigo,

Evite usar os construtores de Date Deprecated.

Sugestões:
Para trabalhar com e Calculos de Data use Calendar.
Para somente exibir ou formatar datas vc usa o DateFormat.
Para transportar e comparar valores de data você deve usar o Date.

Eu teria feito seu exemplo dessa forma:

    private DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    
    public void dataAtual() {
        final Date dataAtual = new Date(System.currentTimeMillis());
        JOptionPane.showMessageDialog(null, "Data atual: " + dateFormat.format(dataAtual), "Data atual", 3);
    }

    public void dataVencimento() {
        final String vencimento = JOptionPane.showInputDialog("Vencimento do emprestimo");
        //Se a String vencimento jah esta formatada nao precisa formatar denovo!
        JOptionPane.showMessageDialog(null, "Data vencimento: " + vencimento, "Data do vencimento", 3);
    }

Para somar/subtrair Datas procure consultar o método:

Calendar.add()

Exemplo:
Se eu quiser 31 dias antes da data de hoje eu faço assim:

        Calendar c = Calendar.getInstance();
        c.add(Calendar.DATE, -31);
        System.out.println(dateFormat.format(c.getTime()));

Se você quiser fazer a diferença em dias de duas datas você tem que pegar a diferença do valor long em ms delas e fazer os cálculos.
Exemplo:

        GregorianCalendar c1 = new GregorianCalendar();
        c1.set(2010, Calendar.AUGUST, 15); // 15/08/2010
        GregorianCalendar c2 = new GregorianCalendar(); //data atual

        long diferenca = c2.getTimeInMillis() - c1.getTimeInMillis();
        long segundos = diferenca / 1000l; //Transformando milisegundos em segundos
        System.out.println("Segundos: " + segundos);
        long horas = (segundos / 60) / 60; // segundos -> horas
        System.out.println("Horas: " + horas);
        long dias = horas / 24; // horas -> dias
        System.out.println("Diferenca em Dias: " + dias); //Vai imprimir 25.

Espero ter ajudado.

1 curtida