基本上我的系统生成数据,来自地球上任何地方的客户都可以访问它.
由于我的数据有一个相关的时间戳,我想到了以下处理时区的策略.
在Postgres:
>为我的时间戳创建一个带有:: timestamptz类型的表.没有时区的时间戳将不被允许混合:: timestamp和:: timestamptz在我的情况下看起来像一个定时炸弹.
>将我的PG服务器系统的时区设置为UTC.
>在postgresql.conf中设置timezone =’UTC'(如果系统的TZ是UTC但可能不需要,但我有点偏执,而且我没有任何成本).
>创建表时添加以下检查:
CONSTRAINT timestamp_must_be_utc CHECK(date_part(‘timezone’:: text,“my_timestamp_field”)= 0 :: double precision)
>以UTC格式存储我的所有时间戳
>将客户的时区存储在他的个人资料中,例如“America / Los Angeles”
>在查询数据时将时区信息发送到postgres,这样我就能得到像SELECT xxxx FROM yyyy WHERE my_ts> =’2012-11-27 19:13:00 01′:: timestamptz,让Postgres转换为UTC.或者我可以使用pytz进行转换,但似乎Postgres会做得很好.
>根据客户的时区转换时间戳,以便我可以正确显示数据时间戳.
总而言之,我计划在任何地方使用UTC来存储和查询数据,并在显示数据时只使用时区转换.
我对Postgres及其处理时区的方式没有多少经验.我知道处理不同时区的日期和时间是多么困难(一旦你必须使用航班时刻表,你就会学到使用UTC是唯一可行的日期和时间微积分的方法)这就是我要问的原因这个问题让我更有经验的postgres用户可以确认或纠正我的策略.
有趣的链接:
> https://stackoverflow.com/a/9576170/1121179
> https://stackoverflow.com/a/10462428/1121179
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。