SimpleDateFormat sdf = new SimpleDateFormat(formatoQueEstaMinhaDataEmString); // no caso SimpleDateFormat(“yyyyMMdd”);
Date d = sdf.parse(myDt);
Rage
Certo kra, vlw pela resposta aí, mas o resultado disso que vc sugeriu é o seguinte:
Eu estava fazendo algo bem parecido com isso, mas aí ele muda totalmente…
No caso o que eu preciso é um atributo do tipo DATE com o seguinte valor: 20060606
Como se fosse:
Date dt = new Date();
dt = "20060606";
Mas tá brabo…
D qq forma vlw pela ajuda.
D
danielbadawi
está aparecendo assim pq vc está printando o Date… para mostrar no formato String deverá usar o mesmo esquema que o ddduran disse mas ao invés de parse(), usar o format()… aí vai te retornar a String formatada do jeito que vc quer…
Rage
String myDt = "20060201";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date d = sdf.parse(myDt);
System.out.println(sdf.format(d));
Certo, o resultado disso é:
Porém em forma de String. Mas como obter este resultado em forma de Date?
L
Lao
Só exemplificando o que o pessoal falou:
Se você quer um padrão de data com 20061228, use o seguinte:
SimpleDateFormatsdf=newSimpleDateFormat("ddmmyyyy");Dated=null;try{d=sdf.parse("10122005");}catch(ParseExceptione){System.err.println("Erro ao transformar a data");}System.out.println(sdf.format(d));
Rage
String myDt = "20060201";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date d = sdf.parse(myDt);
System.out.println(sdf.format(d));
Certo, o resultado disso é:
Porém em forma de String. Mas como obter este resultado em forma de Date?
L
Lao
Só exemplificando o que o pessoal falou:
Se você quer um padrão de data com 20061228, use o seguinte:
SimpleDateFormatsdf=newSimpleDateFormat("ddmmyyyy");Dated=null;try{d=sdf.parse("10122005");}catch(ParseExceptione){System.err.println("Erro ao transformar a data");}System.out.println(sdf.format(d));
D
danielbadawi
em forma de Date é o próprio Date… usa com sdf.parse()…
pronto… vc está com um Date…
o que acontece é que vc está printando o objeto Date… e aí a data sempre vai sair por extenso pois esta é a implementacao do método toString() do objeto Date…
pode ficar com o Date na mao… ele é seu objeto certo… e se por acaso quiser printar o valor dele no seu formato, aí usa o método format()… que obviamente (e corretamente) sempre será uma String
Rage
Entendí o q vc está falando, vc realmente tem razão.
Porém neste caso, eu estava dando o print só pra conferir o valor, na verdade eu nao tenho necessidade de printar esse cara nao.
Como eu disse, esse campo é uma coluna do tipo DATE no oracle, que ao selecioná-la faço um TOCHAR()
select TO_CHAR(tab.col,'YYYYMMDD') rotulo
Então ela vem pra mim como String, e preciso tranformá-la em Date.
Meu Deus, será q é tão complikdo??? :-o
De String para Date…
String datadoBanco = "20070707";
Date datadoBean = (Date)datadoBanco;
Seria algo tipo isso, já q isso não funciona…
[]´s
Rage
Entendí o q vc está falando, vc realmente tem razão.
Porém neste caso, eu estava dando o print só pra conferir o valor, na verdade eu nao tenho necessidade de printar esse cara nao.
Como eu disse, esse campo é uma coluna do tipo DATE no oracle, que ao selecioná-la faço um TOCHAR()
select TO_CHAR(tab.col,'YYYYMMDD') rotulo
Então ela vem pra mim como String, e preciso tranformá-la em Date.
Meu Deus, será q é tão complikdo??? :-o
De String para Date…
String datadoBanco = "20070707";
Date datadoBean = (Date)datadoBanco;
Seria algo tipo isso, já q isso não funciona…
[]´s
ddduran
Trabalhar com data é sempre traumatizante em qualquer linguagem, mas especialmente em java é o triplo…
bem vindo ao Java
Rage
hahahahah, porque eu não estou surpreso??
Java tem horas q é phoda!!!
D
danielbadawi
cast direto de String para Date nao vai funcionar nunca. só com o sdf.parse()… nao vejo complicação nisso… já até postaram um pedaço que código que faz isso
D
danielbadawi
agora, se vc for manipular datas… aí sim dou razão para o ddduran… a API de Calendar do Java é realmente porca.
mas nem por isso é o fim do mundo… existem projetos open source que tratam datas com mais facilidade… como o Joda Time
LogsAtualizacaola=newLogsAtualizacao();StringmyDt="20060201";//fictício, vem do banco, numa StringSimpleDateFormatsdf=newSimpleDateFormat("yyyyMMdd");Dated=sdf.parse(myDt);la.setDatUltMovimentacaoUf(d);//este método só aceita DateSystem.out.println(la.getDatUltMovimentacaoUf());
Resultado:
Wed Feb 01 00:00:00 BRST 2006
Ou então tem alguma cosia q eu não estou enxergando...
D
danielbadawi
cara, ja disse…
vc está printando um objeto Date. e SEMPRE vai ser printado por extenso qdo der system.out.println num Date…
Deixa eu te explicar uma coisa sobre Objetos
Em java, TODO e qualquer objeto é filho da classe Object.
Object tem um método chamado toString() que a implementação nada mais é que o nome da classe mais o seu hashcode…
Toda vez que vc manda printar um objeto, o método toString() será invocado. SEMPRE.
algumas vezes queremos mostrar alguma coisa mais do que simplesmente mostrar o nome da classe mais o hashcode… é entao que o método toString() é sobreescrito. E isso acontece com o Date.
A implementação do toString() dele é diferente… foi implementado para mostrar o Date por extenso.
resumindo: toda vez que vc printar um Date, a data vai sair por extenso…
quer mostrar a data em outro formato? use o SimpleDateFormat:
printe o sdf.format(date) que aí sim vc vai conseguir mostrar o formato desejado
Rage
Daniel, obrigado pela sua ajuda kra.
Legal o que você disse, valeu mesmo, eu não sabia dessas coisas. :?
O que me deixou com a pulga atrás da orelha, foi que mesmo no debug(Eclipse), onde ele mostra os valores das variáveis, veio este formato por extenso, eu não estava nem printando nada, mas mostrou assim. Provavelmente pelo fato do toString() ser chamado automaticamente quando printa.
Então não tem jeito de ver o formato como está…talvez inserindo no banco. Vou tentar assim.
Vlw[]´s
gomesrod
Ou em outras palavras:
A variavel Date não guarda o valor que você atribuiu, ou seja "20060707".
O que foi armazenado na variável Date é a data 07 de Julho de 2006.
Depois de atribuido um valor para a Data ela não tem nenhum compromisso de exibi-lo usando o mesmo formato que você.
Se você pede para imprimir a representação em String da Data, ela vai fazê-lo do jeito que sabe fazer, que é escrevendo a data por extenso.
Para imprimir a data em um formato qualquer (yyyyMMdd, dd/MM/yyyy, etc etc) você precisa realizar um processo específico, que "lê" a data e monta a String como desejado.
StringmyDt="20060707";java.text.SimpleDateFormatsdf=newjava.text.SimpleDateFormat("yyyyMMdd");java.util.Dated=sdf.parse(myDt);System.out.println("Representacao String do objeto Date: "+d);System.out.println("Veja que ele possui o valor 07 de julho de 2006 (correto!)");System.out.println("Mas se você precisa formatar a data usando o seu formato, precisa fazer isso:");System.out.println("sdf.format(d): "+sdf.format(d));
Rage
Entendí kras…
O meu lance aquí não seria exatamente imprimir, mas apenas me certificar de que estou populando o bean com o dado no formato correto.
Porém mesmo assim foi ótimo, excelente tomar conhecimento do que vcs estão dizendo a respeito do Date em java, pois eu não sabia dessas coisas.
Como eu tenho uma validação de campos, toda vez que tento validar este campo ele é recusado, justamente por ser obrigatório o formato yyyyMMdd. Qd vem a data por extenso, dá M…
Mas uma coisa está estranho: o verdadeiro valor neste caso é 20070707, porém se eu mandar imprimir ele imprime por extenso.
Ok. Mas pq não passa na validação então?
Obrigado.
Rage
Ae pessoal, valeu pela ajuda mais uma vez, acho que finalmente conseguí entender o que vcs estavam querendo me dizer!!!
vc foi persistente pra entender o q tava acontecendo e foi até o final…
e o melhor, entendeu como funciona e não ficou só pedindo a solução pronta como mta gente faz…
Bom, pelo q eu entendi, vc está tentando carregar esta data do banco de dados … da p/ vc usar o metodo getDate o ResultSet.
Caso precise transformar de string p/ Date e Date p/ string msm é soh utilizar o código jah postado. Porem quando vc for exibir o conteudo, vc precisa de outro SimpleDateFormat com o formato q deseja exibir. Depois q vc pega o jeito eh simples, principalmente levando em conta q a Classe Date guarda a data em milisegundos (desde 1/1/1970).
SimpleDateFormatformatoBD=newSimpleDateFormat("yyyymmdd");Dated=null;try{d=formatoBD.parse("20051210");}catch(ParseExceptione){System.err.println("Erro ao transformar a data");}SimpleDateFormatformatoPrint=newSimpleDateFormat("dd/mm/yyyy");System.out.println(formatoPrint.format(d));
Espero que tenha esclarecido.
R
rdgc
Rage:
Ae pessoal, valeu pela ajuda mais uma vez, acho que finalmente conseguí entender o que vcs estavam querendo me dizer!!!
Apenas uma dica… tente não utilizar nome de variáveis como ‘resVal’ ou ‘vnum’, com as IDE’s de hoje, não justifica o uso de abreviações (ctrl+espaço no Eclipse nos ajuda!), a não ser que estes nomes realmente representam algo em seu sistema. Procure utilizar nomes completos…