使用夏令时计算时间戳

时间:2013-01-04 13:02:09

标签: sql oracle time oracle11g dst

中欧夏令时从3月的最后一个星期日开始。我们的时钟从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}在02:00会发生什么?是02:59还是01:59?

应如何处理? Oracle Database 11g 11.2.0.2.0版的最佳实践及其处理方式(在我的特定情况下)?

1 个答案:

答案 0 :(得分: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之间的间隔   不存在。该时间间隔内的值无效。