暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 带有本地时区的时间戳

ASKTOM 2020-06-14
381

问题描述

试图处理时区DST感知日期时间处理,但我无法同时获得安全和方便的处理。
几乎完美的解决方案是带有本地时区的时间戳,除了它使用nls_timestamp_format (而不是使用nls_timestamp_tz_format) 不允许格式化任何时区信息,因此在转换过程中会丢失夏令时信息。
尽管有 _ is _ 时区信息,但它恰好与本地时区对齐 (但它不是 _same_,因为中欧时区是CET或CEST)。

因此,例如带有本地时区的时间戳-> char转换 (无需在每次使用时都明确指定格式字符串)
由于欧洲时区无法区分 “2020-10-25 02:30:00 02:00” 和 “2020-10-25 02:30:00 01:00”,因为两者都将输出 “2020-10-25 02:30:00”。

我错过了一些非常明显的东西吗?

专家解答

我不完全确定你的问题是什么。也许这会有所帮助:

时区 => 的时间戳完全按-is存储值。

带有本地时区 => 的时间戳将值标准化为数据库的时区。返回用户所在时区的数据。

因此,如果00:00 DB时区,则存储在具有LTZ的TS中的值为:

2020-10-25 02:30:00 02:00 => 2020-10-25 00:30:00 UTC
2020-10-25 02:30:00 01:00 => 2020-10-25 01:30:00 UTC

在30午夜UTC,布鲁塞尔仍在实行夏令时 (CEST) => 布鲁塞尔上午2:30
UTC早上30点,夏令时在布鲁塞尔 (CET) 结束 => 布鲁塞尔上午2:30

这就是为什么使用本地时区报告两者的时间相同的原因: 因为它们are同一小时。计算is日光节约意识!

当您指定02:00时,数据库不知道您所在的区域。可能是比利时或南非 (不遵守夏令时)。夏令时的信息不会丢失!
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论