Java实体Hibernate到Oracle时区转换问题

时间:2015-06-04 07:35:43

标签: java oracle hibernate

我的数据库在ET时间运行。我的java应用服务器在PT时区运行。

应用程序代码--- entitybean.setdate(Util.converCurrentDateToTimeZoneDate(“ET”));

   public static Date converCurrentDateToTimeZoneDate(String timeZone){

    Calendar calInput = new GregorianCalendar();
    Calendar calOutput = new GregorianCalendar();

    if (timeZone.equals("ET")){
        calInput.setTimeZone(TimeZone.getTimeZone("America/New_York"));
    }

    if (timeZone.equals("PT")){
        calInput.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
    }
    if (timeZone.equals("CT")){
        calInput.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
    }

    if (timeZone.equals("MT")){
        calInput.setTimeZone(TimeZone.getTimeZone("America/Denver"));
    }

    calOutput.setTimeZone(calInput.getTimeZone());
    return calOutput.getTime();

}

场景是:

如果我的服务器时间是PT时间的下午1:00,则util正确地将其转换为4:00 PM ET,这是我想要存储在表中的值。

但是当我保存实体时,表中反映的值是PT下午4:00。

请帮助解决此问题?

1 个答案:

答案 0 :(得分:1)

我不确定我是否明白了,但我希望对我的经历发表评论可以帮助您找到正确的答案。假设您使用的是Oracle DATE类型,据我所知,它没有任何时区信息(作为Java DATE,它以ms为单位存储时间差)。只有在显示或表示日期时才处理时区。

如果牢记这一点,您可以忽略应用程序数据库端的时区,并专注于Java客户端;例如,如果您可以考虑PT时区中的所有日期,请将它们作为日期存储在数据库中,并仅在您需要显示它们时使用您需要的时区来表示它们。

请考虑此链接以进一步阅读此问题:

How to store date/time and timestamps in UTC time zone with JPA and Hibernate

希望这有帮助。