【问题标题】:hsqldb TIMESTAMP field not accepting zone as America/Los Angeleshsqldb TIMESTAMP 字段不接受区域为美国/洛杉矶
【发布时间】:2015-04-22 17:28:00
【问题描述】:

我在 hsqldb 表中有一个 TIMESTAMP 字段,我想将其设置为“2015-02-11 16:02:01.488 America/Los_Angeles”,但即使我将该列设置为 TIMESTAMP WITH TIMEZONE,插入也会失败,原因是 hsqldb 似乎支持“2008-08-08 20:08:08-8:00”格式,但没有像 America/Los_Angeles 那样拼写出来。有没有办法让插入接受 America/Los_Angeles 类型的区域?

【问题讨论】:

    标签: sql parsing timezone timestamp hsqldb


    【解决方案1】:

    抱歉,hsqldb 不支持直接使用IANA/Olson time zonesTIMESTAMP WITH TIMEZONE 只支持时区偏移,这是正确的。您可以查看the hsqldb docs 进行确认。

    许多数据库不支持命名时区。 Oracle 和 Postgres 支持它们,但其他大多数不支持。

    还请考虑,虽然命名时区通常可以确定偏移量,但在回退daylight saving time 转换周围仍然存在模棱两可的情况。换句话说,如果您有“2015-11-01 01:30:00 America/Los_Angeles”,您无法确定地判断它是太平洋夏令时间 (UTC-07:00) 还是太平洋标准时间 (UTC-08: 00)。这就是为什么通常只存储 offset 的原因。

    反之亦然。如果您只存储“-08:00”,那么您无法确定地知道它来自“America/Los_Angeles”。

    这是一个有用的一般准则:

    • 如果本地时间不重要,则只需根据 UTC 存储 TIMESTAMP

    • 如果本地时间很重要,但该值永远不会被修改,则使用本地时间及其关联的时区偏移存储 TIMESTAMP WITH TIMEZONE

    • 1234563 ,或数据库中的其他位置。在编辑操作期间,使用时区名称来计算新值的偏移量。可能相同,也可能不同。

    另请参阅 DateTime vs DateTimeOffset,它为 .Net 和/或 SQL Server 提出了类似的论点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2020-06-14
      相关资源
      最近更新 更多