Converter data em double[resolvido]

É possivel transformar uma data num tipo double? preciso que uma variável double receba uma data…

 sql="insert into dados_climaticos_variaveis";
                        sql+="(dado_climatico, variavel, tipo_dado, valor_dado, data, hora)";
                        sql+=" values (" + v_cod + ", " + v_variavel + ", " + v_tipoDados+", ";
                                                                               
                        if (v_tipoDados.equals("1")) //data
                        {
                            
                        }

                        if (v_tipoDados.equals("2")) //inteiro
                        {
                            
                        }
                        
                        if (v_tipoDados.equals("3")) //double
                        {
                            
                            Double vvalor=0.0; //ESTA É A VARIÁVEL QUE QUERO QUE RECEBA A DATA 
                            
                            switch (Integer.parseInt(v_variavel)) {
                                case 1:
                                    vvalor = data.getTemperature(); 
                                    break;
                                case 2:
                                    vvalor = (double) data.getRelativeUmidity(); 
                                    break;
                                case 6:
                                    vvalor = data.getPrecipitation(); 
                                    break;
                                case 13:
                                    vvalor = Double.parseDouble(data.getDateTime().toString()); // TENTEI CONVERTER PRIMEIRO PRA STRING MAS NÃO ENVIA O VALOR DA DATA  E HORA PARA O BANCO
                                    break;
                                case 14:
                                    vvalor = (double) data.getLeafWetness(); 
                                    break;
                               
                                default:
                                     System.out.println("Este não é uma variavel válida");
                             }
                              
                            if (v_conversao!=0)
                                vvalor = LeitorDadosClimatico.conversao(vvalor,v_operadorConversao,v_conversao);
                            
                                sql+= "row("+ 0 +","+vvalor+","+null+","+null+","+null+")";
                                System.out.println("VVALOR: "+vvalor); 
                            
                        }                        

Obrigada

não é prciso converter, só faz o seguinte

        Double <Nome da variavel> = <Objeto date>.getTime();

só lembrando que você pode armazenar esse numero em um tipo long já que o tempo é em milissegundos, sendo sempre um número inteiro.

mas ai o vvalor não tinha que ser do tipo Calendar? Eu já declarei que ele é Double…eu preciso que ele seja double e armazene uma data no banco…

Se a intenção é converter um objeto Date para double basta fazer isso que disse anteriormente, ele armazenará o dado em milissegundos, depois para ver a data basta formatar o valor armazenado.

Olá, eu faço da seguinte maneira, gravo no banco um bigint, como tipo de dados do campo, e na hora de recuperar o mesmo eu simplesmente recupero com o

rs.getLong("NomeCampoData"); // pois java trata datas no formato Unix como Long, ai formato ele para o formato de data que eu quiser.

Att,
André Dalcin

não consegui ainda…o meu data no banco precisa ser date…

sua data ta formatada? da erro ou o que q é? vc quer armazena os milesegundos da data? ou 11/11/1111 virar 11111111 ?

No banco, o vvalor é do tipo tdados, então ele recebe qualquer tipo de valor…mas no meu código ele é do tipo double, e eu consegui converter todos as outras variáveis para double, menos a data…então o meu código nãe executa até o final…dá este erro:

[color=red]java.lang.NumberFormatException: For input string: “java.util.GregorianCalendar[time=1230775200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“America/Sao_Paulo”,offset=-10800000,dstSavings=3600000,useDaylight=true,transitions=129,lastRule=java.util.SimpleTimeZone[id=America/Sao_Paulo,offset=-10800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=9,startDay=8,startDayOfWeek=1,startTime=0,startTimeMode=0,endMode=3,endMonth=1,endDay=15,endDayOfWeek=1,endTime=0,endTimeMode=0]],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2009,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=-10800000,DST_OFFSET=3600000]”
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)[/color]

na linha

 vvalor = Double.parseDouble(data.getDateTime().toString());

esta gambiarra de transformar a data antes em string e depois tentar transformar td em double foi uma tentativa…eu deixei assim pra ver o que acontecia… :shock:

o vvalor recebe os dados e envia eles para a minha tabela no banco…

 public Calendar getDateTime() {  
           return dateTime;  

eu declaro o dateTime como string?

Talvez esses exemplos te ajuidem…

[code] Date data = new Date(); // pega a data atual
System.out.println("data: " + data);

	long dataEmMilisegundos = data.getTime(); // converte em milisegundos
	System.out.println("dataEmMilisegundos: " + dataEmMilisegundos);
	
	Date novaData = new Date(dataEmMilisegundos); // usa os milisegundos pra criar um novo objeto Date
	System.out.println("novaData: " + novaData);
	
	String dataString = String.valueOf(dataEmMilisegundos); // pega o valor em String da data
	System.out.println("dataString: " + dataString);
	
	Double dataEmDouble = new Double(dataString); // usa o String pra gerar um objeto Double
	System.out.println("dataEmDouble: " + dataEmDouble);
	
	double dataEmDoublePrimitivo = Double.parseDouble(dataString); // usa o String pra gerar um primitivo double
	System.out.println("dataEmDoublePrimitivo: " + dataEmDoublePrimitivo);
	
	Date dataRecuperadaDoublePrimitivo = new Date((long)dataEmDoublePrimitivo); // cria Date a partir do primitivo double
	System.out.println("dataRecuperadaDoublePrimitivo: " + dataRecuperadaDoublePrimitivo);
	
	Date dataRecuperadaDouble = new Date(dataEmDouble.longValue()); // cria Date a partir do objeto Double
	System.out.println("dataRecuperadaDouble: " + dataRecuperadaDouble);[/code]

O que sai no console é isso:

data: Mon Nov 22 14:48:57 BRST 2010 dataEmMilisegundos: 1290444537066 novaData: Mon Nov 22 14:48:57 BRST 2010 dataString: 1290444537066 dataEmDouble: 1.290444537066E12 dataEmDoublePrimitivo: 1.290444537066E12 dataRecuperadaDoublePrimitivo: Mon Nov 22 14:48:57 BRST 2010 dataRecuperadaDouble: Mon Nov 22 14:48:57 BRST 2010

1 curtida

eu não entendi eu acho…
na minha cabeça era pra estar dando certo…

                        case 13:
                                    double vdata = Double.parseDouble(String.valueOf(data.getDateTime()));
                                    vvalor = new Double(vdata);
                                    break;

eu só preciso que este pedacinho de código funcione…

Essa variável “data” é de que tipo? De onde ela veio?
Ah, e o que tem dentro desse método “getDateTime()” dela?
Tenho quase certeza que o erro está aí dentro…

Desculpa Ariane… mas…

Pra que converter uma Data em um Double ou vice-versa ??? Qual a finalidade ??

Abs

eheheh…que enrolada que eu dei, né?
vou tentar explicar…

eu tenho uma classe:

             public class DadosClimaticos implements Comparable<DadosClimaticos>{

dentro de DadosClimaticos está o getDateTime…

private Calendar dateTime;  
...

 public Calendar getDateTime() {  
           return dateTime;  
       }  
...

 public int compareTo(DadosClimaticos o) {  
           return dateTime.compareTo(o.dateTime);  
       }  
...

e o data está na classe

public class LeitorDadosClimatico {
...

public static void main(String[] args)  
       {  
           try {  
               int i = 0;  
               for (DadosClimaticos data : readClimateData(new File("C:Ariane/arq1.txt"))) {  
                   i++;  
                   System.out.println("Linha " + i);  
                   System.out.println(data);  
                   System.out.println("");  
               }  
           } catch (FileNotFoundException ex) {  
               System.out.println("Arquivo não encontrado!");  
           }  

e o “for” deve percorrer todos os elementos do array fazendo a leitura do arquivo e das variáveis e seus respectivos valores e inseri-las no banco…
me fiz clara? ehehe

continuou enrolado pra mim… ainda não entendi porque transformar um tipo Data em Double…

Se estás recuperando uma Data, porque não salvar como Data mesmo ???

Se recuperares um Double, porque não salvar no Banco como Numeric ou Double (dependendo do seu SGBD)… ???

Isso que eu ainda não entendi… quero que você diga assim:

“Eu preciso converter uma Data para um Double, porque em meu Sistema…”

No aguardo.

adriano_si

eu que preciso me desculpar por estar tomando o tempo de vcs
tentando explicar uma coisa que nem eu sei bem pq…eu to fazendo
a leitura deste arquivo, que tem os valores de alguns dados de uma certa
estação, como data, hora, temperatura, etc…eu conseguia inserir as informações
em todos os campos da tabela, meeenos no bendito “valor_dado tdados”, que recebe o vvalor, que antes recebia

vvalor = Double.parseDouble(linha.substring(vinicial , vfinal));

onde :

 vinicial=rs_modelos.getInt("posicao_inicial");
 vfinal=rs_modelos.getInt("posicao_final");

e a posição inicial e final recebia a posição na linha de onde começava tal informação, por exemplo, a data é da posição 1 até a 10…

Agora, eu não uso mais estas posições inicial e final, pois mudei o método de leitura do arquivo…
e fiz aquele switch louco, pq queria que o vvalor recebesse direto o valor da variável…se v_variavel = 1
então vvalor recebe o dado da temperatura (pq o código da variável temperatura é 1)…
se v_variavel = 13 (que é a data/hora) vvalor não recebe nada pq dá erro! :? eheheh

por isso eu quero fazer converter uma Data em um Double ou vice-versa …
UFA!

O problema é esse mesmo, o método “toString()” da classe Calendar retorna um monte de baboseiras…

Tenta trocar essa linha aqui:

double vdata = Double.parseDouble(String.valueOf(data.getDateTime()));

Por isso:

double vdata = Double.parseDouble(String.valueOf(calendar.getTimeInMillis()));

heueheueheue sem problemas Ariane, todo mundo que lhe responde é pq está com vontade de ajudar mesmo…

Vamos lá… eu insisto com você com essa questão, porque ainda acho que o negócio em questão está mal arquitetado…

Como que você não sabe que tipo de Dado que você vai recuperar no arquivo e qual o tipo que vai salvar no Banco ??? Se esse valor for variável e você possuir um valor único no Banco, acnoselho a mudar o valor do Banco de Dados para Varchar e passar tudo pra esse campo como String… Isso iria facilitar a sua vida… sei que já to parecendo chato, mas prefiro lhe mostrar uma solução de Design melhor do que corrigir uma situação que vai lhe dar + dor de cabeça lá na frente… a menos que me diga que não há como mudar de jeito nenhum e que a vida de alguém tá dependendo da conversão de um tipo Date para Double (o que eu acho difícil) senão, isso não fica viável, fica feio e apesar de possível é um jeito ruim de resolver um problema de conversão…

Abs []

Boa noite, se o que que é converter para double, irei postar um exemplo:

[code]
import java.util.Date;
import java.text.DateFormat;

public class DataPDouble{
public static void main(String[] args){
Date dt = new Date();//irá pegar a hora do seu sistema operacional;

        double d = dt.getTime();//armazenei numa variavel do tipo double
        Double db = d;//se o problema for encapsulmento
        DateFormat df = DateFormat.getDateTimeInstance();//pegara as formatações de data padrão do sistema
        System.out.println("double:   " + df.format(d));//irei exibir o dado que está numa variavel do tipo double
        System.out.println("Double 'encapsulado':   " + df.format(db));//irei exibir o dado que está encapsuldo
   }

}[/code]

marcelo.bellissimo…deu erro…um método não estático não pode ser referenciado por um contexto estático…

adriano_si

mas eu sei…cm assim, não sei?? ehehe…eu vou recuperar do arquivo uma data…e vou salvar no banco a data ué…eheheh…mas o meu campo valor_dado(banco) aceita qualquer tipo…int, varchar, date, time, etc…ele é do tipo tdados…o meu[color=red] vvalor [/color]é double e eu tentei fazer receber uma data (getDateTime que é do tipo Calendar)…o meu problema não é no banco e sim no código…mas eu vou aceitar a tua sugestão…eu vou fazer esta dataTime ser uma String…então o vvalor vai receber ela sem problemas…mas não é errado?

Abraços

Não sei se é isso, mas a variável que eu te mandei no exemplo estava errada pois eu estava testando no meu Eclipse… tenta essa:

double vdata = Double.parseDouble(String.valueOf(data.getTimeInMillis()));