【问题标题】: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 zones。 TIMESTAMP 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”。
这是一个有用的一般准则:
另请参阅 DateTime vs DateTimeOffset,它为 .Net 和/或 SQL Server 提出了类似的论点。