Classe Date

2 respostas
G

Classe Produtos:
Atributos: codigo, nome, data de fab., data de validade ,preço.

Pede-se:Para os campos de data, atributo data de validade, entrar com o dia, mês e ano numericos e armazena-los no formato de data segundo a classe Date.

Para o atributo data de fab., deve-se armazenar no formato:Dia da semana, numero do dia, mês, ano, horario.(D).

Metodo CalcularValidade()= calcular quantos dias totais existem entre a  data atual e a data de validade (D).Dica: de milesimos/86400000= de dias)

Meu Codigo

dtfab = a.lerStrings(Data de Fabricacao: (dd/mm/aaa));

dtval = a.lerStrings("Data de Validade: ");

//abaixo converte a string dtval em data = String srt

java.text.SimpleDateFormat formato=new java.text.SimpleDateFormat(dd/MM/yyyy);

String  str = 24/04/2006;

java.util.Date dtval = null;

try {

dtval = formato.parse(str);

System.out.println(dtval); //Imprime a data digitada

}

catch (java.text.ParseException e) //caso de erro

{

e.printStackTrace();

}

Gostaria de saber se estou no caminho certo e com faço para armazenar a data de fabricação no formato pedido e depois calcular a validade do item.

Obrigado

2 Respostas

F

Cara, é o seguinte:

Pelo que eu olhei no seu código, voce esta usando o parse da classe SimpleDateFormat, eu sempre fazia usando o método format dessa mesma classe passando como parâmetro a data que você quer formatar!
Um método que eu uso, que é um pouco mais trabalhoso, mas até agora não deu erro é o seguinte:

Usar o Date da classe sql.Date para fazer a conversão de uma String para um Date, depois que tiver esse objeto Date, passar essa variável como parâmetro para o método format da SimpleDateFormat para deixar ele do jeito que você quiser, mas não se esqueça que o format vai devolver uma String e não um Date, se quiser fazer alguma operação com Date, faça antes de aplicar a formatação desejada.

O problema de usar a sql.Date, é que a data tem que estar necessariamente no formato de banco de dados, ou seja: yyyy-mm-dd.
Para isso, se você tiver uma String, pode quebrá-la em substrings e adicionar os campos em cada uma variável, depois concatená-la novamente.
Vou mostrar como seria mais ou menos o código:

import java.util.Date;

public class TestaData{


          Date data;
          String dataCompleta;

          public void transformaData( String dataUsuario )
          {
                      String dia, mes, ano;
            
                      //dataUsuario == 29/05/2007
                      //Quebrando a String para dia, mes e ano separados
                      dia = dataUsuario.substring( 0 , 2 );
                      mes = dataUsuario.substring( 3 , 5 );
                      ano = dataUsuario.substring( 6 , 10 );


                      //Depois de separado, concatenar novamente, no formato
                      //do bando de dados
                      dataCompleta = ano + "-" + mes + "-" dia;
                   

           }//Fim do transformaData();

           public void transformaParaDate ( String dataSQL )
           {
                      try
                     {
                          //Esse método é estático, de modo que assim que voce
                          //acessa ele....
                          //A variável data ja sera setada com esse valor!!!

                           data = java.sql.Date().parse( dataSQL );

                      } catch( Exception e )
                      {
                                 //Exception de transformacao
                      }
            }// Fim da transformaParaDate();


            public void operacaoData( Date dataEnviada )
            {
                     /*
                      Nesse método pode passar a variável data que já está
                      com o valor alterado para ser usada aqui dentro.
                     */

             }


}

Lembre-se que a classe util.Date oferece muitos
métodos utéis para tratamento de datas.

Tem métodos para saber se a data referenciada é
antes de uma data passada, ou se é depois.

A classe SimpleDateFormat permite transformar a
data de várias formas, se você precisar da data
completa ( Terça-feira, 19 de maio de 2007.
Hora atual: 11:26:12 )
tem como fazer isso automaticamente, e ainda usando
recurso de internacionalização, onde se alterar o
indioma, para inglês por exemplo, o formato da data
também mudaria e ficaria o nome de mês por exemplo
em inglês!!!

Não sei se é o melhor caminho, mas pra mim funcionou em outras aplicações e nunca tive maiores problemas!!!
Pode ser que esse exemplo ai em cima de algum erro, afinal eu não compilei esse código para testar… coloquei o que eu me lembrei de cabeça na hora!!!

Espero ter ajudado um pouco!!!

Boa sorte!!!

L

Eu ja acho que se vc fizer um substring em alguma string já esta errado… nada de substring…

Da uma estudada nesse código…

public static void main(String[] args) {
		// aqui vc digita as datas, blablabla e joga para uma string
		String dtFabStr = "10/10/2005";
		String dtValStr = "10/11/2006";

		SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");

		try {
			// aqui vc converte de string para date
			Date dtfab = formato.parse(dtFabStr);
			Date dtval = formato.parse(dtValStr);

			// aqui vc faz: total de millisegundos da data de validade menos
			// total de millisegundos da data de fabricação, e ai vc tem o total
			// de millisegundos entre as duas datas, ai é só converter para dias
			// como seu professor disse
			long diasTotais = (dtval.getTime() - dtfab.getTime()) / 86400000;
			System.out.println(diasTotais);

		} catch (ParseException e) {
			e.printStackTrace();
		}

	}

simples, sem complicar :stuck_out_tongue:

Criado 28 de maio de 2007
Ultima resposta 29 de mai. de 2007
Respostas 2
Participantes 3