【问题标题】:How do I insert an Oracle DATE object in UTC TZ without changing default TimeZone and without a PreparedStatement?如何在不更改默认时区和 PreparedStatement 的情况下在 UTC TZ 中插入 Oracle DATE 对象?
【发布时间】:2017-06-02 03:08:58
【问题描述】:

我的 Oracle 数据库中有一个名为 changed_utc 的列。我想插入一行,将此列设置为指定时间的值,以便它以 UTC 格式到达DATE 列。

警告:

  • 我无法更改TimeZone.defaultTimeZone

【问题讨论】:

  • 你失去了我。 “将此列设置为指定时间的值,因此它以 UTC 形式到达 DATE 列。”这是什么意思?
  • 一般来说,在 UTC 中存储仅日期字段并不是一个好主意,除非您的业务规则恰好与 UTC 日期保持一致。我建议您存储 UTC 日期和时间(以便您可以根据需要转换回来),或者只存储与业务相关的日期而不转换为 UTC。例如,如果您要存储生日、周年纪念日、雇用日期等 - 不要将它们转换为 UTC。
  • @MattJohnson 我正在存储日期和时间。
  • @GordThompson,是的,我知道 Oracle DATE 没有时区字段。我只希望时间字段反映 UTC。
  • @GordThompson,我会试试的,谢谢。

标签: oracle jdbc oracle11g timezone


【解决方案1】:

使用PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal)

如果您使用的是 ORM,那么您必须弄清楚如何通过该 ORM 访问此设置器。如果 ORM 没有办法调用它,那么你就卡住了。

【讨论】:

    【解决方案2】:

    这会将时间从当前时区转换为 UTC。这有帮助吗?

    select current_timestamp at time zone 'UTC'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-25
      • 2016-02-19
      • 2019-11-12
      • 1970-01-01
      • 2012-05-29
      • 2018-07-24
      • 2022-01-15
      • 2014-10-13
      相关资源
      最近更新 更多