【发布时间】:2012-11-16 06:21:38
【问题描述】:
我有一个在单个时区运行的应用程序 (java - oracle 11g R2)。现在它必须在多个时区运行。我的要求是,无论登录时区如何,都希望将数据存储在一个时区(比如 IST)中。但希望应用程序根据各自的实体时区向用户显示日期和时间。我将无法更改所有已编写的 Oracle 查询。想要将用户附加到位置并在用户登录时将用户的alter(oracle)会话附加到他的本地时区。
这可能吗?
【问题讨论】:
标签: oracle
我有一个在单个时区运行的应用程序 (java - oracle 11g R2)。现在它必须在多个时区运行。我的要求是,无论登录时区如何,都希望将数据存储在一个时区(比如 IST)中。但希望应用程序根据各自的实体时区向用户显示日期和时间。我将无法更改所有已编写的 Oracle 查询。想要将用户附加到位置并在用户登录时将用户的alter(oracle)会话附加到他的本地时区。
这可能吗?
【问题讨论】:
标签: 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 类也是独立于时区的。
这样做,日期只有在您将它们格式化为字符串以将它们显示给客户时才会获得时区。
我经常看到这个问题,以至于我最近写了一篇关于它的博客文章。 见here。
【讨论】: