Comparar Datas

3 respostas
marcos.menezes

Pessoal

Boa noite.

Estou querendo comparar datas.

Ex: Eu cadastro um orcamento no dia de hoje (15/12/2009) como pendente. Esse servico é valido por 30 dias. ou seja ate o dia 15/01/2010. Preciso fazer o seguinte, quando eu consultar o orcamento e clicar em alterar o sistema precisa comparar se a data do banco (cadastrada) + 30 dias nao é maior que a data atual do sistema, para que o orcamento seja valido. se for maior, ele nao cadastra.

so que nao estou conseguindo fazer isso.

segue o codigo.

if(ae.getActionCommand().equals("Alterar"))
		{
			if("Pendente".equals(orcstatus.getSelectedItem())) {
				JOptionPane.showMessageDialog(tela, "Favor alterar status para Aprovado.");
			} else {
				if(!orccpf.getText().equals(""))
				{
					pf = daopf.consultar(pf);
					orc = daoorc.pesquisarpf(pf);
				} else {
					pj = daopj.consultar(pj);
					orc = daoorc.pesquisarpj(pj);
				}
				
				orc.setStatus(orcstatus.getSelectedItem().toString());
				//altera o status
				daoorc.alterar(orc);
				//aviso de sucesso
				JOptionPane.showMessageDialog(tela, "Orçamento Aprovado.");
				boolean dataValida = false;
				Date dataPromessaConvert = null;
				do {
					String dataPromessa = JOptionPane.showInputDialog(tela, "Qual a data de promessa para entrega do serviço?");
					try {
						dataPromessaConvert = DateFormat.getDateInstance().parse(dataPromessa);
						if(dataPromessaConvert.after(new Date()))
							dataValida = true;
					} catch (Exception e) {
						e.printStackTrace();
					}
				} while (!dataValida); 
				//fecha a tela
				tela.dispose();
				//gravar a os
				OrdemServico os = new OrdemServico();
				os.setIdOrcamento(orc.getIdOrcamento());
				os.setDataPromessa(dataPromessaConvert);
				os.setStatus("Pendente");
				os.setIdPessoaFisica(orc.getIdPessoaFisica());
				os.setIdPessoaJuridica(orc.getIdPessoaJuridica());
				daoos.incluir(os);
				JOptionPane.showMessageDialog(tela, "Ordem de Serviço gerada com sucesso.");
			}
		}

Tomara que leiam a tempo.

3 Respostas

T
Calendar cal = Calendar.getInstance();
cal.add (Calendar.DATE, +30); 
Date hojeMais30Dias = cal.getTime();

A propósito, como Date tem horas, minutos e segundos, o correto, para efetuar comparações, é você remover as horas, minutos e segundos para evitar problemas. Uma forma de se fazer isso é a seguinte (corrija eventuais erros de compilação, por favor):

Date agora = new Date(); // por exemplo
Calendar cal = Calendar.getInstance();
cal.setTime (agora);
cal.set (Calendar.HOUR, 1); // uso sempre 1 devido a problemas com o horário de verão
cal.set (Calendar.MINUTE, 0);
cal.set (Calendar.SECOND, 0);
cal.set (Calendar.MILLISECONDS, 0);
Date hoje = cal.getTime(); //
T

Vc tambem pode utiliza a biblioteca joda-time:
http://joda-time.sourceforge.net/

public static int intervaloDias(Date dataIni, Date dataFim) {
		DateTime dtIni = new DateTime(dataIni.getTime());
		DateTime dtFim = new DateTime(dataFim.getTime());
		Days dias = Days.daysBetween(dtIni, dtFim);

		return dias.getDays();
	}
Vini_Fernandes

Cara, para comparar datas faca o seguinte:

Date dataCadastrada = //data que vem do banco
Date dataOrcamento = //aqui voce tera a sua data com os 30 dias a mais.

if(dataCadastrada.compareTo(dataOrcamento) < 0){
//data cadastrada eh anterior a data orcamento 
}
else if(dataCadastrada.compareTo(dataOrcamento) == 0){
//data cadastrada eh igual a data orcamento 
}
else if(dataCadastrada.compareTo(dataOrcamento) > 0){
//data cadastrada eh superior a data orcamento 
}

T=

Criado 15 de dezembro de 2009
Ultima resposta 15 de dez. de 2009
Respostas 3
Participantes 4