我的数据库在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。
请帮助解决此问题?
答案 0 :(得分:1)
我不确定我是否明白了,但我希望对我的经历发表评论可以帮助您找到正确的答案。假设您使用的是Oracle DATE类型,据我所知,它没有任何时区信息(作为Java DATE,它以ms为单位存储时间差)。只有在显示或表示日期时才处理时区。
如果牢记这一点,您可以忽略应用程序数据库端的时区,并专注于Java客户端;例如,如果您可以考虑PT时区中的所有日期,请将它们作为日期存储在数据库中,并仅在您需要显示它们时使用您需要的时区来表示它们。
请考虑此链接以进一步阅读此问题:
How to store date/time and timestamps in UTC time zone with JPA and Hibernate
希望这有帮助。