我有一个在单个时区运行的应用程序(java - oracle 11g R2)。现在它必须在多个时区运行。我的要求是,无论登录时区如何,都希望将数据存储在一个时区(比如 IST)中。但希望应用程序根据各自的实体时区向用户显示日期和时间。我将无法更改所有已编写的 Oracle 查询。想要将用户附加到位置并在用户登录时将用户的alter(oracle)会话附加到他的本地时区。
这可能吗 ?
我有一个在单个时区运行的应用程序(java - oracle 11g R2)。现在它必须在多个时区运行。我的要求是,无论登录时区如何,都希望将数据存储在一个时区(比如 IST)中。但希望应用程序根据各自的实体时区向用户显示日期和时间。我将无法更改所有已编写的 Oracle 查询。想要将用户附加到位置并在用户登录时将用户的alter(oracle)会话附加到他的本地时区。
这可能吗 ?
数据类型TIMESTAMP WITH LOCAL TIME ZONE
是时区感知的。它将数据存储在数据库服务器的时区中。如果用户从不同的时区连接,则存储的值将显示在他的本地时区中。
要更改DATE
列,您可以使用
ALTER TABLE mytable MODIFY d TIMESTAMP WITH LOCAL TIME ZONE;
可以检查查询,有关详细信息,请参阅Migrating Oracle DATE columns to TIMESTAMP with timezone。
使用 Oracle DATE 类型,它存储独立于时区的日期。
然后,请注意 Java Date 类也与时区无关。
通过这种方式,日期只有在您将它们格式化为字符串以将它们显示给客户端时才会获得时区。
我经常看到这个问题,以至于我最近写了一篇关于它的博客文章。在这里看到它。