2014-01-21 28 views
0

我有一个简单的预订场景,其中用户可以预订其他用户的预定位置。我这样做的方式是,我使用postgres将时隙存储为字符串数组。典型的阵列表示类似于[“晚上10点”,“晚上10点30分”]。但是,由于不同的用户在不同的时区,所以我使用客户端来检测时区并在各自的时区显示插槽。我的问题是,这足以存储时隙并将它们转换为不同的时区,或者我需要存储确切的时间戳吗?ruby​​中的时区

即时通讯使用红宝石和DB

framewokr和Postgres
+0

由于您将时间数据用作'array'中的'string's,因此您无法在数据库中使用'datetime'数据类型的好处。在这种情况下,我不清楚你的问题是关于什么的? – scaryguy

+0

我只对不同时区的实际时间转换感兴趣,但是我想知道的是,具有日期信息并且是否会影响转换的准确性? –

回答

2

我存储的时隙作为字符串数组轨使用的是Postgres

不要。请不要。

如果它们是具体的时间戳(日期+时间),将它们存储为timestamptz,这样它们就是时区无关的。您可以使用AT TIME ZONE运营商在本地时间用户获取它们,或者将它们转换为客户端。

如果它们只是时间,请使用time数据类型,并将它们存储为UTC时间,使用AT TIME ZONE运算符适当地转换本地时间/从本地时间进行转换,或进行客户端转换。

如果可能,将它们存储在规范化表格中。如果出于某种原因(说服我)不能这么做(说服我),至少应该使用适当数据类型的PostgreSQL数组,而不是一个字符串数组 - 或者更糟的是,因为它看起来像您可能正在做的事情,Ruby的字符串表示形式字符串数组。

这是最近在dba.stackexchange.com上讨论的一个问题的变体,讨论了whether native database types or a comma separated list would be better。简短的版本:除非你有一个真正的非常好的理由否则做一个数据库友好的方式。