Conversão de long para java.util.Date

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));
    }
}