考虑夏令时的时间戳计算

6

中欧夏令时从每年三月的最后一个星期日开始。我们将时钟从02:00调整到03:00。如果我在数据库请求中进行时间戳计算,比如在01:59,会发生什么?

UPDATE sessions SET aliveuntil = (CURRENT_TIMESTAMP + INTERVAL '1' MINUTE) WHERE id = ?

我会得到03:00还是02:00作为结果?

如果我们将时钟从03:00设置为02:00,情况又如何呢?

SELECT id FROM sessions WHERE aliveuntil < (CURRENT_TIMESTAMP - INTERVAL '1' MINUTE)

当时间从03:00更改为02:00时,(CURRENT_TIMESTAMP - INTERVAL '1' MINUTE)在02:00会发生什么?是02:59还是01:59?

应该如何处理?最佳实践和Oracle Database 11g Release 11.2.0.2.0如何处理(在我的特定情况下)?

1个回答

4
如果我正确理解他们的文档,它取决于数据库中表/列的设置方式。 如果列设置为使用WITH TIME ZONE,则Oracle会自动确定正确/相关的值。 在您上面的示例中,如果列aliveuntil具有此设置,则如果您尝试在1:59添加1分钟,则时间将更新为3:00。
这里是我在该主题上找到的一篇有用的文章:

http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm

请向文章底部滚动,您应该会看到您正在寻找的内容。
这是我发现相关的文章部分:
例如,在美国东部地区,当夏令时生效时,时间从凌晨01:59:59变成凌晨3:00:00。02:00:00至02:59:59之间的时间不存在,该时间段内的值无效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接