2015-06-04 26 views
0

我的数据库在ET时间内运行。我的Java应用程序服务器正在PT时区中运行。Java实体休眠到Oracle时区转换问题

应用程序代码--- 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(); 

} 

的情况是:

如果我的服务器时间是1:00 PM PT时,UTIL是将其转换为4:00 PM ET正确的,这是我要存储的值表。

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

请帮忙解决这个问题?

回答

1

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

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

请考虑此链接为进一步阅读有关此问题:

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

希望这有助于。