【问题标题】:How to set Oracle time zone region in tomcat如何在tomcat中设置Oracle时区
【发布时间】:2018-01-24 07:33:31
【问题描述】:

我有一个连接到 Oracle 数据库的 tomcat5 服务器,我喜欢指定 Oracle 会话时区。

我设法通过将JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Europe/Zurich" 添加到配置文件tomcat5.conf 来定义它。问题是当我在 Oracle SELECT SESSIONTIMEZONE FROM dual; 中查询时,我得到 +02:00

目前这是可以的,但是在夏令时关闭的冬季会出错 - 除非我重新启动 tomcat 服务器。

如何将时区设置为区域名称(例如 Europe/Zurich)而不是 UTC 偏移量(例如 +02:00)?我想避免在我的 Oracle 中运行显式 ALTER SESSION SET TIME_ZONE = ...;

【问题讨论】:

  • 您是否有可能将会话时区显式设置为 +02:00 的数据库登录触发器?或者 - 也许更有可能 - 配置中的其他东西正在丢失或替换该设置?如果您通过 SQL*Plus 连接到同一个数据库和帐户,您会看到哪个会话时区?
  • 与环境变量(或注册表设置)ORA_SDTZ 定义的相同 - 符合预期。
  • 登录触发器是一种解决方案,但在这种情况下,我会在我的 PL/SQL 代码中使用ALTER SESSION SET TIME_ZONE = ...;。除此之外,我无权在此数据库上创建数据库触发器。
  • 我是在问你是否已经有了一个,而不是建议你添加一个 *8-) 但是如果 SQL*Plus 可以的话,似乎无论如何都不会。您使用的 -D 标志符合您的预期,因此由于某种原因,它似乎没有到达 JVM。我会检查 JAVA_OPTS 的后续设置是否会破坏这个设置,并且最终的 JVM 调用实际上使用了该变量。

标签: java oracle tomcat timezone


【解决方案1】:

说真的,Tomcat5? Tomcat 5.5 在 2012 年一直是 decommissioned。好吧,除此之外:我建议以不同的方式解决这个问题:在后端存储时区出没的数据总是一团糟。因此,您应该始终纯粹存储 UTC,而不用担心任何夏令时、用户的地理位置或当前时区,除非您将数据呈现给用户。只有这样(并且在输入时),您才能将其与当前用户的当前时区相关联,并相应地转换为/从 UTC 转换。

因此,您提出的问题可能看起来合乎逻辑,但之后会导致很多痛苦。省去自己的痛苦,然后在后端使用 UTC。

您已经知道如何设置 Tomcat 的默认时区,您可能还希望能够处理用户特定的时区,但这是完全不同的野兽。

【讨论】:

  • 是的,我知道它已经过时了。这是一个不再维护的第 3 方应用程序,因此升级将是一个更大的项目。无论如何,它正在按照您的建议工作,但是如果没有为当前用户(即 tomcat 用户)正确设置时区,如何呈现正确的值,这就是我试图实现的目标。
  • 如果用户没有配置他们的时区,向他们显示默认值,包括时区指示器。我也可以反问:您目前如何决定选择哪个时区?
  • 我必须选择的时区是“欧洲/苏黎世”。问题是,我无法告诉这个应用程序,resp。数据库。在某处它会自动将其更改为“+02:00”,这是不一样的!好吧,从今天开始没关系,但 10 月底就可以了。
  • 我无法告诉这个应用程序“-嗯,这是时间相关数据类型的基本用法。再次:无需在数据库上进行配置:假设数据库保存的所有内容和显示是UTC。表中的数据类型通常不知道时区。如果您可以硬编码欧洲/苏黎世 - 这将使您的应用程序更简单(直到有一天,您需要实现用户的不同时区)。保存时区出没数据库中的数据是完全错误的。
  • 我不需要在数据库上配置它,我必须为 Oracle 用户会话定义它以便返回所需格式的日期值(由 3rd 方应用程序定义 - 是的,它必须是一个字符串!tomcat 提供了一个 SOAP 响应,它是 XML,根据定义是文本)主题不是如何在数据库中存储日期/时间值,我对此非常了解。
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 2010-11-22
  • 2014-12-14
  • 2021-07-16
  • 1970-01-01
  • 2014-11-21
  • 2015-06-01
  • 2014-11-16
相关资源
最近更新 更多