关于在postgresql中使用时区的策略
我需要在我的应用程序中使用多个时区.
基本上我的系统生成数据,来自地球上任何地方的客户都可以访问它. 由于我的数据有一个相关的时间戳,我想到了以下处理时区的策略. 在Postgres: >为我的时间戳创建一个带有:: timestamptz类型的表.没有时区的时间戳将不被允许混合:: timestamp和:: timestamptz在我的情况下看起来像一个定时炸弹. CONSTRAINT timestamp_must_be_utc CHECK(date_part(‘timezone’:: text,“my_timestamp_field”)= 0 :: double precision) 在客户端(python pytz) >将客户的时区存储在他的个人资料中,例如“America / Los Angeles” 总而言之,我计划在任何地方使用UTC来存储和查询数据,并在显示数据时只使用时区转换. 我对Postgres及其处理时区的方式没有多少经验.我知道处理不同时区的日期和时间是多么困难(一旦你必须使用航班时刻表,你就会学到使用UTC是唯一可行的日期和时间微积分的方法)这就是我要问的原因这个问题让我更有经验的postgres用户可以确认或纠正我的策略. 有趣的链接: > https://stackoverflow.com/a/9576170/1121179 解决方法
根据喜好自己做一杯茶/咖啡,预留一个小时左右,并在
timestamp处理时阅读手册
details.玩一下,一切都会变得清晰.
如果您使用“带时区的时间戳”(timestamptz),处理不同的时区是没有问题的.它应该被命名为“绝对时间戳”,内部是UTC.时区部分未存储,它只是用于获得绝对时间. 因此 – 确保所有时间戳都包含更新时的相关时区,然后恰当地设置您的客户端时区.它们将在客户的时区返回给您,无论它们提供的时区如何. 它确实变得狡猾的是处理一天不总是24小时(有时一小时不是3600秒)的事实,并且DST根据国家和历史在不同的日期发生.那不是PostgreSQL,那只是现实世界. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |