postgresql – 使用TIMESTAMP WITHOUT TIME ZONE的有效用例是什
关于两者之间的差异,有一个很长很清楚的答案
> TIMESTAMP与时区 可用in this SO post.我想知道的是:是否有任何有效的用例实际使用TIMESTAMP WITHOUT TIME ZONE或者它应该被视为反模式.
这在很多地方都有说明,但我认为值得一提的是,我们将时区与时区进行比较,时间戳没有时区类型:时区带时区不存储时区信息和时间戳.它的作用是以UTC时区
as stated in the docs存储每个数据:
对于某些人来说,在(1)所有内容都在同一时区或(2)应用程序层处理时区并仅将所有内容存储在某个时区(通常是UTC)的情况下,使用时区没有时区被认为是有效的.但它也被认为是反模式,简单,因为(1)的正确解决方案是将TimeZone设置配置为系统的给定一个时区,(2)已经解决,因为PostgreSQL已经将所有内容存储在同一时区(世界标准时间). 现在,随着这两个下来,我只有一个很好的理由使用时区没有时区.那时候你想要存储未来的事件,并且当我们到达那个时候必须触发某种警报.如果且仅当区域关于时区的法律规定的规则不会发生变化时,这可能适用于带时区的时间戳.最常见的变化规则是采用或不采用日光节约时间(DST). 例如,假设你在2013-06-15(尚未在夏令时)安排一些事件发生在2013-01-15 10:00(已经在夏令时),并且在2013- 06-15您的地区被指定采用DST;但是,在那之后的一段时间,政府改变了规则,并说你的地区将不再使用夏令时,突然你的预定时间变成2013-01-15 11:00(而不是10点),如果你使用时间戳与时区,并使您的TZ配置保持最新.当然,您可能还会注意到,如果您跟踪感兴趣的区域/时区中的规则更改,并且更新受影响的记录,也可以使用时区处理此类案例. 值得一提的是,一些地区确实经常改变这些规则(比如在巴西,有些州 – 而不是整个国家 – 经常会改变),但在大多数情况下它会更早地改变它,所以你的用户只会受到远离预定的事件的影响现在的时间. 尽管如此,我还有一个建议.如果您确实拥有不同时区的用户,日志或任何内容,请存储他们来自某个地方的时区,并选择并使用带时区的时间戳.通过这种方式,您可以(1)跨越彼此更接近的事件(不同于他们的时区)和(2)显示事件发生的原始时间(时钟时间). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |