Simplificando, selecionando um oráculo
DATE em um Java Date é inerentemente problemático. Isso porque eles são fundamentalmente diferentes. Um Oracle DATE é a combinação de ano, mês, dia, horas, minutos, segundos, sem nenhuma informação de fuso horário, então pode ser qualquer fuso horário, com ou sem horário de verão - o Oracle não sabe, pois essa informação não está incluída no DATE . Por outro lado, uma Data Java é basicamente o número de milissegundos desde 1/1/1970 00:00:00 UTC.
Quando um Oracle
DATE entra em um Java Date , o driver JDBC só pode adivinhar qual fuso horário aplicar. Os resultados são bastante imprevisíveis, especialmente quando os dados no banco de dados usam outro fuso horário que não o usuário.