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???
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…
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?
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
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
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.