Criar Método Validade

23 respostas
Mitnick8

Boas,

Venho com mais uma duvida, é o seguinte:

Fiz um programa em JAVA de controle de medicamentos, porém decidi implementar um “jtextfield” para Validade isso com implementação em banco, porém estou sem saber como que eu faço isso, se tenho que usar a classe “Date”, como vou calcular a validade e como eu vou fazer para que o banco receba isso e repasse para uma chamada posterior.

23 Respostas

josue_carrecon

Mitnick8:
Boas,

Venho com mais uma duvida, é o seguinte:

Fiz um programa em JAVA de controle de medicamentos, porém decidi implementar um “jtextfield” para Validade isso com implementação em banco, porém estou sem saber como que eu faço isso, se tenho que usar a classe “Date”, como vou calcular a validade e como eu vou fazer para que o banco receba isso e repasse para uma chamada posterior.

Mande seu codigo!!!

Mitnick8

Esse é o problema… Não fiz nada, estou na faculdade fazendo JAVA mais ainda não cheguei a esse ponto de usar a classe DATE

Mais o que queria era algum como o seguinte:

Estou fazendo um programa de controle de Medicamento e gostaria de adicionar uma validade a eles e posteriormente o programa me informar se está vencido ou não.

Usuário Digita a data em forma de String o programa recebe

O programa salva no BD o data

O programa busca no BD e me passa quando o medicamento está pra vencer

E

Mitnick8:
Esse é o problema… Não fiz nada, estou na faculdade fazendo JAVA mais ainda não cheguei a esse ponto de usar a classe DATE

Mais o que queria era algum como o seguinte:

Estou fazendo um programa de controle de Medicamento e gostaria de adicionar uma validade a eles e posteriormente o programa me informar se está vencido ou não.

Usuário Digita a data em forma de String o programa recebe

O programa salva no BD o data

O programa busca no BD e me passa quando o medicamento está pra vencer

Já desenhou as telas? Está usando SWT? JSP? etc…

Para converter string em Date você pode usar o SampleDateFormat (método parse).

Para pegar, por exemplo, a string de um JTextField, se me lembro bem, você deve usar o getText().

Mitnick8

Bom, “voei” agora com sua pergunta, mais os termos digamos “técnicos”, o que estou com dificuldade e na parte de como usar a classe Date, de como inserir dados nela, de como inserir no banco, de como buscar isso no banco e depois de como fazer o calculo para saber se vai vencer ou não?

E

Bom, para criar uma data a partir de uma String, você faz assim (considerando que está usando o java.util.Date)

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); // para o formato de 2010/11/10, por exemplo
  try{
    Date dataNoJava = formatter("2010/11/10");
  }catch(ParseException e){
    e.printStackTrace();
  }

Para inserir nem alguma consulta no banco de dados, se você tiver um objeto Connection:

PreparedStatement ps = connection.prepareStatement("select * from tabela where campo_data > ?");
  ps.setDate(1, dataNoJava ); //o primeiro parâmetro indica que vai substituir o primeiro "?", o segundo é o objeto que vai substituir esse "?"
Mitnick8

Muito obrigado amigo, mais o que estou mais intrigado ainda é:

Para eu pegar a data que está no banco e calcular o tempo que falta, digamos pra saber a validade, no caso se (já venceu ou não)

como que eu faria isso?

Obrigado desde ja :smiley:

Mitnick8

Fiz o codigo que falou porém deu um erro nessa linha

E

Mitnick8:
Fiz o codigo que falou porém deu um erro nessa linha

Date dataNoJava = [b]formatter/b;
ops, digitei errado, hehehe, faltou o método parse.

Date dataNoJava = formatter.parse("10/11/2010");
Mitnick8

Consertei esse erro, tentei apagar o posto mais não consegui :frowning:

Fiz tudo certo, porém estou com duvida em relação a como recuperar essa dado de forma que de pra calcular a validade, assim “dizendo” ao usuário se está vencido ou não…

elias_era
Mitnick8:
Consertei esse erro, tentei apagar o posto mais não consegui :(

Fiz tudo certo, porém estou com duvida em relação a como recuperar essa dado de forma que de pra calcular a validade, assim "dizendo" ao usuário se está vencido ou não...

Não sei se tem alguma classe, mas dá para fazer por lógica:
String dadoRecuperado = dadoRecuperado.replace( '/', '' );

int data = Integer.parseInt(dadoRecuperado);
int validade = 20101201;//yyyymmdd
if( data > validade)
medico.vencido = true;
E

você pode fazer diretamente no sql com preparedStatement como te mostrei anteriormente, ou pode usar o método getTime() da data, e comparar eles:

data1.getTime()>data2.getTime()

Se me lembro bem, o getTime retorna a quantidade de millisegundos ocorridos desde 1/1/1970 até a data do objeto. (um tipo primitivo long)

Mitnick8

Cara, muito obrigado, obrigado mesmo, era isso que estava procurando, só não entendi o:

E

Mitnick8:
Cara, muito obrigado, obrigado mesmo, era isso que estava procurando, só não entendi o:

# String dadoRecuperado = dadoRecuperado.replace( ‘/’, ‘’ );
nesse caso, ele pega a data em uma String no formato “yyyy/MM/dd” e remove as barras (substitui por texto vazio). Com isso é possível converter em um inteiro de formato yyyyMMdd, e pela lógica, você sabe que comparar inteiros nesse formato é equivalente a comparar datas.

Mitnick8

Estou deste então a modificar todo os códigos, consegui terminar agora, mais aí apareceu outro erro, até imagino o que houve porém não estou conseguindo corrigir.

String validadeMed = txtValidade.getText().replace("/", "");
        Date dat = new Date();
        String dataHoje = String.valueOf(dat); //Pega a data do dia atual e transforma em String
        
[b]        int dataHoj = Integer.parseInt(dataHoje); Pega a data em String e transforma em Int[/b]
        int valid = Integer.parseInt(validadeMed);
        if (valid < dataHoj) {
            jPanel.setBackground( Color.RED );
        }

Imagino que o erro é por querer transformar uma "Date" em "Integer", porém como faria isso, ou como faria a comparação do (if) ?

elias_era

Qual o valor de dat? Quando não se coloca nada no construtor ela vem com a data de hoje?

E

Mitnick8: vc tentou da forma que eu falei?

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); // para o formato de 2010/11/10, por exemplo  
         try{  
           Date dataNoJava = formatter.parse("2010/11/10");  
         }catch(ParseException e){  
           e.printStackTrace();  
         }  
         Date dat = new Date();  
           
         if (dataNoJava.getTime() < dat.getTime()) {  
             jPanel.setBackground( Color.RED );  
         }

Outra coisa, se vc quiser fazer da maneira que está tentando fazer (que eu não julgo ser a mais adequada), essa linha:

String dataHoje = String.valueOf(dat);

Não vai formatar a data em yyyy/MM/dd, não lembro agora qual formato ele vai usar, mas não é yyyy/MM/dd (para transformar em yyyy/MM/dd você também pode usar o SampleDateFormat, com o método format)

Mitnick8

Funcionou Perfeitamente,

Obrigado pessoal, mais só pra fechar no 10 :smiley:

Eu queria implementar o seguinte, quando o medicamento estivesse vencido a tela ficava Vermelha, isso eu consegui, blz.

O problema é:

Queria também mudar o cor da tela para que 3 meses antes de vencer a tela ficasse Amarela, a mudar a cor eu sei, o que eu não sei é como fazer esse calcula?

Obrigado novamente.

E

Você pode fazer assim (mas não recomendo, pois é um método deprecated, mantido apenas para compatibilidade com sistemas antigos):

dat.setMonth(dat.getMonth()-3);

A forma mais elegante de fazer isso é assim (mas essa eu não lembro de cabeça se é exatamente assim, talvez você tenha que procurar como se faz):

Calendar cal = Calendar.getInstance(dat.getTime());

  cal.add(Calendar.MONTH, -3);
Mitnick8

Opa…

O código que me passou:

at.setMonth(dat.getMonth()-3);

Não estou conseguindo colocar dentro da condição i[/i]

e este outro:

1. Calendar cal = Calendar.getInstance(dat.getTime()); 2. 3. cal.add(Calendar.MONTH, -3);

Realmente está um pouco errado consegui que funcionasse com isso:

Calendar cal = Calendar.getInstance(Locale.ENGLISH); cal.add(Calendar.MONTH, -3);

Só que também não consegui por dentro da condição…

:frowning:

E

então, você gera um objeto Date ou Calendar, e pega o time deles para comparar. Procura se informar melhor sobre os métodos getTime() da classe Date, e da classe Calendar.

Mitnick8

Vou ver o que posso fazer…

Mitnick8

Pois é, estou até agora aqui tentando resolver o problema e nada, levei para os amigos de sala, e nenhum deles me deu uma soluções, me deram sugestões e ela tentei todas, mais nada de conseguir,

Meu problema é:

Fazer com que eu receba uma mensagem para quando faltar 3 meses de um medicamento vencer. fiz isso quando ele estiver vencido, mais quero também fazer quando faltar de 3 meses a 0 dias para vencer.

Amigos Help…

Mitnick8

Alguém…???

Criado 9 de novembro de 2010
Ultima resposta 11 de nov. de 2010
Respostas 23
Participantes 4