[RESOLVIDO] Problemas com Date (para variar), mas bem IMPORTANTE e URGENTE

Oi gente,

Sei que é um assunto antigo e n vezes debatido, mas sou nova o fórum e estou com um problema para converter uma String para Date e minhas pesquisas não me ajudaram muito.
Tenho 2 problemas.

Número 1
Tenho o seguinte código:
DateFormat fmtOut = new SimpleDateFormat(“EEE, dd MMM yyyy HH:mm:ss Z”);
Date newDate = fmtOut.parse(dateRss);

Que devia servir para converter a string dateRss com o seguinte valor: Wed, 05 Sep 2012 20:25:40 +0100, em Date

No entanto, o que obtenho é uma exceção de ParseException, que está sendo tratada com um try-catch e acaba executando uma segunda ação: ele usa o mesmo SimpleDateFormat para formatar um new Date() (pegando a Data Atual), porém me retorna um formato diferente: Mon Sep 10 18:12:51 AMT 2012, do que criei.

Número 2
Esse mesmo código do SimpleDateFormat e do parse não convertem minha string, razão pela qual ele entra na exceção que está sendo tratada com try-catch e acaba pegando a data atual.

A prioridade é ele trabalhar convertendo a data que está na string, não usando a data atual.

Já estou presa nisso há um bom tempo e não consigo resolver e sendo problema no trabalho, estou meio que com pressa.

Por favor, por favorzinho, alguém tem uma ideia de como resolver?

Agradeço desde já.

Opa, amigo

veja se ajuda:

String data = "07/23/12 23:09";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh/MM/yyyy");
Date date = new Date(data);

Eu acho que ele está confundindo os literais.

como estamos no Brasil o resultado do EEE seria Qua e não Wed.

Tente setar o Locale quando instanciar o SimpleDateFormatDateFormat fmtOut = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", new Locale("en", "US"));

Muito bem observado, digaoneves. O mês também está em inglês, pelo exemplo postado.

Oi gente.

Bem, vendo as respostas de vocês, setei o Locale no meu SimpleDateFormat e está funcionando agora :slight_smile:

Realmente, a data vinha em um padrão diferente da máquina que uso, portanto ficava diferente mesmo.

Agradeço a ajuda de vocês.

Resolvido um problema, sobrou o outro que ainda não consegui entender nem contornar.

Quando uso o SimpleDateFormat, por exemplo: SimpleDateFormat fmtOut = new SimpleDateFormat(“EEE, dd MMM yyyy HH:mm:ss zzz”, Locale.ENGLISH);
Para trabalhar com a seguinte String: stringDate = Thu, 31 May 2012 14:55:21 +0100 e transformá-la em Date, ele some com a vírgula e me retorna isso: Thu May 31 09:55:21 AMT 2012

Ainda teria a ver com o Locale ou mesmo o formato dos patterns do SimpleDate?

Para explicar isso para você, você vai ter de entender o seguinte conceito: java.util.Date não guarda a data nesse formato ( Thu May 31 09:55:21 AMT 2012 ).

Ele guarda como um long (inteiro de 64 bits), que é o número de milissegundos que se passaram desde 1/1/1970.

Ou seja, um número um pouco grande, que ninguém vai conseguir entender só de olhar (bom, tem gente que consegue, mas acho que deve estar na mesma categoria daqueles caras que conseguem dizer em que dia caiu a Páscoa do ano 1234 depois de Cristo…)

Quando você pega um java.util.Date e faz algo como:

System.println (dt); 

ele chama o método toString() da classe java.util.Date. Esse método produz essa saída esquisita: “Thu May 31 09:55:21 AMT 2012”, mas internamente um java.util.Date não tem isso que você está vendo. Ele tem so um número, e acabou.

Para mostrar um java.util.Date do jeito que você quer, é sempre preciso usar um java.text.SimpleDateFormat, ou então usar alguma opção esquisita do String.format (eu acho essas opções tão complicadas que acabo sempre usando um SimpleDateFormat).

Por isso, não importa de que jeito você leu a data ou se você usou o parse de um jeito ou de outro. Na hora que essa data vira um java.util.Date, toda a formatação original é destruída e você fica apenas com um número.

Vou fazer uma comparação.
Digamos que seu salário seja 12.345,67 reais (ou pelo menos você gostaria de ganhar isso :slight_smile: ).
Você concorda comigo que seu salário vai ser o mesmo, sendo "R$ 12.345,67’, “12345.67”, “DOZE MIL TREZENTOS E QUARENTA E CINCO REAIS E SESSENTA E SETE CENTAVOS” ou 1.234567E+04?

Todas essas representações (strings) são para o mesmo número.

Então, de qualquer forma preciso do SimpleDateFormat, correto?
Mas, mesmo utilizando-o, o resultado do print que coloquei vem sem a vírgula Thu May 31 09:55:21 AMT 2012, mesmo assim, está certo?

A resposta é: você está realmente usando o SimpleDateFormat e olhando a string que ele está fornecendo com format?
Parece que você está olhando diretamente o java.util.Date (que no debugger aparece com esse formato que é gerado por toString()).