首页 文章

hsqldb TIMESTAMP字段不接受美国/洛杉矶区域

提问于
浏览
0

我在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类型区域?

1 回答

  • 0

    抱歉,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) . 这就是为什么通常只存储偏移量的原因 .

    反过来也是如此 . 如果您只存储“-08:00”,那么您无法确定地知道它来自“America / Los_Angeles” .

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

    • 如果当地时间不重要,则只需存储基于UTC的 TIMESTAMP .

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

    • 如果本地时间很重要并且可以修改该值,则将 TIMESTAMP WITH TIMEZONE 存储在一列中,将时区名称(即"America/Los_Angeles")存储在第二个 VARCHAR 列或数据库中的其他位置 . 在编辑操作期间,使用时区名称计算新值的偏移量 . 它可能是相同的,也可能是不同的 .

    另请参见DateTime vs DateTimeOffset,它为.Net和/或SQL Server提供了类似的参数 .

相关问题