fgsl
Janeiro 21, 2009, 10:25am
#1
O método a seguir está retornando a hora como texto com um decremento de 1, em relação a hora configurado no objeto Date passado como parâmetro. Por exemplo, se a hora em date é 6, na string vira 5, se é 12 vira 11.
public static String toString(Date date, String s, TimeZone timezone)
{
if(date == null)
{
return GenericFormatter.fillRight("", ' ', s.length());
} else
{
SimpleDateFormat simpledateformat = new SimpleDateFormat(s);
simpledateformat.setTimeZone(timezone);
return simpledateformat.format(date);
}
}
Não entendi porque isso ocorre, mesmo após ver o fonte do método format.
Estou usando:
private static int timeZone = -3; // GMT -3
private static SimpleTimeZone brazilianTimeZone = new SimpleTimeZone(timeZone * 60 * 60 * 1000, "BRA");
E a string do formato de hora é “HH:mm:ss”
fgsl
Janeiro 21, 2009, 11:55am
#3
O problema não é com a Classe Date, mas com o parsing de SimpleDateTime para gerar o Date.
Agora percebi que eu inverti a situação no texto, na verdade a hora retornada é o incremento de 1 da original.
Assim, a string de hora 05:59:24 se transforma no objeto Date 06:59:24. E se eu usar 00:15:45 vou ter 01:15:45.
Isso não faz sentido, porque já estou determinando o valor da hora. Não é como o argumento do mês que é de 0 a 11.
Senão vou ter que passar -01:30:21 pra ter 00:28:12.
Esse é o problema.
thingol
Janeiro 21, 2009, 11:59am
#4
Que timezone é esse (“BRA”)?
Os timezones para o Brasil são:
“Brazil/Acre”
“Brazil/DeNoronha”
“Brazil/East”
“Brazil/West”
fgsl
Janeiro 21, 2009, 12:13pm
#5
O criador do código havia colocado BET.
Fui pesquisar BET neste endereço:
http://www.worldtimezone.com/wtz-names/
E vi que era Bering Standard Time (UTC-11)
Procurei no mesmo local timezone para o Brasil e encontrei BRA.
Fiz a alteração para “Brazil/East” e rodei novamente o teste, mas continua do mesmo jeito.
Ah, obrigado pela lista de timezones.
thingol
Janeiro 21, 2009, 12:28pm
#6
Se você está em um lugar onde o horário de verão está em vigor (São Paulo, RJ, BSB etc.), então o timezone corrente não é GMT-3 e sim “Brazil/East”. Mas deve haver mais algum problema em algum ajuste no seu sistema.
thingol
Janeiro 21, 2009, 12:41pm
#7
Ah, e seu código sempre está criando um timezone, em vez de usar um que já existe. Você deveria usar algo como:
TimeZone brazilianTimeZone = TimeZone.getTimeZone ("Brazil/East");