中欧夏令时从三月的最后一个星期日开始。我们将时钟设置为 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 版本 11.2.0.2.0 如何处理(在我的特定情况下)?
如果我正确理解他们的文档,这取决于数据库中表/列的设置方式。如果列设置为使用“WITH TIME ZONE”,则 Oracle 会自动确定正确/相关的值。在上面的示例中,如果aliveuntil 列具有此设置,那么如果您尝试在 1:59 添加 1 分钟,时间将更新为 3:00。
这是我发现的关于该主题的一篇有用的文章:
http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm
向下滚动到文章底部,您应该会看到您要查找的内容。
这是我发现相关的文章的一部分:
例如,在美国东部地区,时间
夏令时从上午 01:59:59 更改为凌晨 3:00:00
生效。凌晨 02:00:00 和 02:59:59 之间的间隔确实
不存在。该区间内的值无效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)