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... 02:00 会发生什么(CURRENT_TIMESTAMP - INTERVAL '1' MINUTE)?是 02:59 还是 01:59?

这应该如何处理?最佳实践以及 Oracle Database 11g 版本 11.2.0.2.0 如何处理(在我的特定情况下)?

4

1 回答 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 am 之间的时间间隔不存在。该间隔中的值无效。

于 2013-01-04T14:28:21.647 回答