Fazer cast de String (dd/MM/yyyy) para Date

Pessoal tem como fazer um cast ou conversão de uma String (dd/MM/yyyy) para um Date?

Oi, Casting direto não dá não você vai ter que fazer a conversão tipo:

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

Date date = sdf.parse("27/07/2006");
1 curtida

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); sdf.setLenient(false); Date data = sdf.parse("01/12/2005");

Seria isso?

Repita comigo: em Java, cast não é conversão (salvo no caso de primitivos, e olhe lá.). Ponha isso na cabeça: cast não é conversão. Se tiver uma pulseirinha do Senhor do Bonfim, escreva sobre ela “Em Java, cast não é conversão” e leia toda vez que for fazer essa pergunta.

O que você quer fazer é uma conversão. Por exemplo:

import java.text.*;
...
DateFormat df = new SimpleDateFormat ("dd/MM/yyyy");
df.setLenient (false); 

Date dt = df.parse ("31/12/2006");
...

Olha, sem fazer flames, mas acho que desde a minha pergunta (cast OU conversão) e em todas as respostas ficou bem entendido que em Java cast e conversão são coisas distintas.

Então a fita do Senhor do Bonfim é desnecessário.

Pessoal valeu.

Cara ontem mesmo você colocou um post aqui com o seguinte código:

 Date data = null;
         String dataTexto = new String(dataInicial);
         SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
         
         format.setLenient(false);
         try {
             data = format.parse(dataTexto);
         } catch (ParseException ex) {
             ex.printStackTrace();
         }

E hoje você pergunta como transformar uma String para Date? Não entendo! Oras a resposta certa para você seria:
“Do mesmo jeito que você fez ontem!”

Só estava zoando um pouco com a fitinha do Senhor do Bonfim.

É que cansei de ver gente tentando fazer isto:

Date dt = (Date) “31/12/2006”;

e não tinha lido a história da conversão.

Infelizmente (ou felizmente, para nós pobres mortais que temos de manter os códigos dos outros), não existe redefinição de operadores. Em C++ isto poderia ser definido com uma sintaxe parecida com a seguinte:

class string {
public:
    operator Date (const string str) {
        SimpleDateFormat df ("dd/MM/yyyy");
        df.setLenient (false);
        return df.parse (str);
    }
    ... etc. ....
}

Sussu. :lol:

Vc ainda pelo que vi conhece C, que pelo que sei é “semelhante” a Java.

Eu vim do PHP que é tipado de forma dinâmica. Aí já viu né.

Cara aproveitando o topico do colega sobre data, um dia desse me peguei com a seguinte historia…

eu tinha um

String stringData = Date.toString();
// Thu Jul 27 11:13:57 GMT-03:00 2006
... no futuro eu precisei de transformar essa String em Date

so que o constructor de Date que recebe String está deprecated,
como que eu devia fazer ?

tentei com o que a API fala pra substituir o new Date(),
DateFormat.parse(String s)
mais o formato com que minha data.toString() ficou dava pau.

como que desenrolo isso ? (acho que essa ñ eh complicado )

Eu estou tendo problema ao inserir data.

[code] String dia;
String mes;
String ano;

     String dataProducao;
     
         dia = boxDia.getSelectedItem().toString();
         mes = boxMes.getSelectedItem().toString();
         ano = boxAno.getSelectedItem().toString();
         
         dataProducao = dia+ "/" +mes+ "/" +ano; 
         
     Date data = null;
     SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
     
     try {
         data = format.parse(dataProducao);
     } catch (ParseException ex) {
         ex.printStackTrace();
     }[/code]

Não está aceitando o formato.

Veja se dia e mês tem dois dígitos, e ano, quatro.

Tem sim. Estou testando sempre assim pra evitar mais um erro.

Isso não é prioridade não. Eu posso muito bem apenas inserir como String, que se eu fosse calcular
algo por uma determinada data, daria certo como String mesmo. Mas é que eu quero evitar redundâncias futuramente.

Estranho dar erro sem ter o setLenient…
Pode postar a exata mensagem de erro que deu?

[quote=dark123]Eu estou tendo problema ao inserir data.

[code] String dia;
String mes;
String ano;

     String dataProducao;
     
         dia = boxDia.getSelectedItem().toString();
         mes = boxMes.getSelectedItem().toString();
         ano = boxAno.getSelectedItem().toString();
         
         dataProducao = dia+ "/" +mes+ "/" +ano; 
         
     Date data = null;
     SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
     
     try {
         data = format.parse(dataProducao);
     } catch (ParseException ex) {
         ex.printStackTrace();
     }[/code]

Não está aceitando o formato.[/quote]

Daí é só colocar isso abaixo do try, para inserir em modo Date no banco:

SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); dataProducao = format.format(data);

Pronto, resolvido!!!

Obrigado a todos por ajudar. :smiley:

Se alguém digita números, o Java não entende que é números?
De jeito nenhum?
Por que?

Grato.
Cláudio.