Olá pessoal,
o código abaixo tenta converter um long (representando a qtde de milisegundos desde 1/1/1970) em um objeto do tipo java.util.Date.
Mas reparem nos valores mostrados no console. o valor do java.util.Date está com 3 horas a menos do que deveria. Alguem me explica?
long hora = 20296000;
//Converter long pra java.util.Date
System.out.println("Date: "+new Date(hora));
//Encontrar o valor da "hora" para esse long
System.out.println(hora/(1000*60*60));
}
Saída no console:
Date: Thu Jan 01 02:38:16 BRT 1970
5
GMT -3? Problema de fuso horário?
já fiz vários testes com Calendar mudando o timezone mas não funcionou…
Quando você imprime um Date usando o Date.toString (que é o que o System.out.println usa implicitamente), é sempre usado o timezone local (que no nosso caso é UTC-3).
É necessário imprimir um Date com um DateFormat e o timezone GMT+00:00:
import java.util.*;
import java.text.*;
class TesteDate {
public static void main(String[] args) {
Date dt = new Date (20296000);
System.out.println (dt);
DateFormat df = new SimpleDateFormat ("dd/MM/yyyy HH:mm:ss.SSS");
df.setTimeZone (TimeZone.getTimeZone ("GMT"));
System.out.println (df.format (dt));
}
}