Problema com data

11 respostas
K

Pessoal, estou fazendo gerando uma string com timestamp de um campo data onforme o codigo abaixo, porém a data do objeto e a data da string resultante estão diferentes, sempre com uma hora de diferença… alguém sabe o que posso fazer ?
Ex: Data do Objeto: Mon Nov 16 11:03:52 BRST 2009
Data da String: 20091116100352
Dados: o objeto é um arquivo serializado, criado em um pc com as configrações regionais Ingles (Estados Unidos)
A execução do código abaixo, ocorre em um servidor Unix.

Date dataCriacao = objeto.getCreationDate();
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
                        String dataCriacaoFormatada = sdf.format(dataCriacao);

Se alguém tiver alguma sugestão eu agradeço…

11 Respostas

janjan

mas tu fez algom como…

SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMddHHmmss”);

objeto.setCreationDate(sdf.format(dataParaFormatar));

se voce só jogou uma data lá no objeto então é natural isso!

nel

Bom dia.

Bem, se realmente está ocorrendo um parser com diferença de uma hora e você queira resolver isto, você pode utilizar o Calendar, não é verdade? Nele você seta a data que já possui e pega a hora e diminui -1, depois retorna a data novamente e ai sim faz o parser para String.

É uma sugestão.
Abraços.

alisonrodrigues
Date dataCriacao = new Date();  
		   SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");  
		   String dataCriacaoFormatada = sdf.format(dataCriacao);  
		   System.out.println( dataCriacaoFormatada );

Não sei se é isso o que vc quer

Foxlol

Cara, o jeito que vc tah fazendo acho que tah certo.

Parece que o problema eh no BRST (Brazilian Summer Time), horário de verão que deve tah configurado na máquina. Tenta desabilitar e ve se continua dando diferença.

Postaram algo parecido aqui no GUJ esses dias mas não to achando.

Acho que tem a ver.

K

Pois é gente, eu estou achando que está bem próximo do que o Foxlol está dizendo mesmo, mesmo porque este código executa em mais de um servidor, e as vezes não distorce a data, (por isto não me adianta usar o calendar para adicionar uma hora)
E este comportamento se iniciou apos a mudança de horario de verão mesmo.

So para ficar mais claro… o Date já existe, ele está em um objeto serializado. O problema está sendo no parser para estrair em um formato determnado.

So não consigo testar o BRST porque isto roda em servidores unix, e aí foge da minha alçada pois tem outras aplicações lá e não posso meter a mão… :frowning:

Foxlol

kozak:
Pois é gente, eu estou achando que está bem próximo do que o Foxlol está dizendo mesmo, mesmo porque este código executa em mais de um servidor, e as vezes não distorce a data, (por isto não me adianta usar o calendar para adicionar uma hora)
E este comportamento se iniciou apos a mudança de horario de verão mesmo.

So para ficar mais claro… o Date já existe, ele está em um objeto serializado. O problema está sendo no parser para estrair em um formato determnado.

So não consigo testar o BRST porque isto roda em servidores unix, e aí foge da minha alçada pois tem outras aplicações lá e não posso meter a mão… :(

Aí complica mesmo, pq a data deve estar vindo de uma maquina não configurada para horario de verão e o parser sendo feito em uma que está.

Creio que ambas deveriam estar sincronizadas nesta configuração para evitar isso.

Ou achar algum meio de fazer o BRST não influenciar o parser.

Achei um cara que fez o seguinte:

sdf.setTimeZone(new SimpleTimeZone(TimeZone.getDefault().getRawOffset(), "GMT+00:00"));

Mas não tem como eu testar aqui.

Flw

K

janjan:
mas tu fez algom como…

SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMddHHmmss”);

objeto.setCreationDate(sdf.format(dataParaFormatar));

se voce só jogou uma data lá no objeto então é natural isso!

em nenhum momento estou setando o objeto… na verdade estou fazendo um get no Date que o objeto possui

K

Foxlol:

Aí complica mesmo, pq a data deve estar vindo de uma maquina não configurada para horario de verão e o parser sendo feito em uma que está.

Creio que ambas deveriam estar sincronizadas nesta configuração para evitar isso.

Ou achar algum meio de fazer o BRST não influenciar o parser.

Achei um cara que fez o seguinte:

sdf.setTimeZone(new SimpleTimeZone(TimeZone.getDefault().getRawOffset(), "GMT+00:00"));

Mas não tem como eu testar aqui.

Flw

Legal Foxlol vou fazer o seguinte… vou tentar passar um código isolado para o unix so para reproduzir o erro… depois se conseguir eu aplibo o setTimeZone… !

K

Então gente… está parecendo ser problema de ambiente mesmo

A máquina unix esta com GMT -3 e nesta situação ocorre a divergência de horario
Executando o teste com um usuário que está setado com GMT-2 não ocorre o erro.

Peguei uma máquina que estava com GMT-2 e estava com erro, fiz um restart de VM e o erro não ocorreu mais. Acho que elanão tinha carregado o TZ.

Vou tenar um restart nas que restaram.

K

Gente descobri o problema…
Uma outra aplicação, que roda sob a mesma JMV estava executando um TimeZone.setDefault alterando o horário da JVM.

Isolada a aplicação em outra VM, até corrigirem o código, ficou resolvido o problema.

Obrigado a todos.
[ ]'s

Foxlol

Eeeeita… :lol:

Flww

Criado 18 de novembro de 2009
Ultima resposta 24 de nov. de 2009
Respostas 11
Participantes 5