Rails Postgres时区处理

时间:2012-02-16 09:19:52

标签: ruby-on-rails postgresql timezone datamapper dm

我想要的简单方法是在数据库中以UTC格式存储DateTime并再次以UTC格式检索它,但是rails似乎假设我将DateTime存储在我的本地时区并添加了8小时差异(PST)。我的模型中有一个DateTime字段。如果我发送一个请求(PUT)来更新我的模型的特定实例中的这个字段,那么时区会因为某种原因而混淆:

通过PUT发送到轨道:2012-02-17T03:46:58Z

通过随后的GET返回:2012-02-17T11:46:58Z

时差恰好是8小时,可以用我的时区来解释,即PST(-08:00)。

我在Rails 3.1.3上使用Datamapper 1.2。

我明确地将应用程序配置时区设置为UTC。

我也尝试使用dm-zone-types。没有为我改变任何东西。

我的回购中的git-bisect显示,当我将数据库从原始sqlite切换到postgres时引入了这种不当行为。此提交仅更改了database.yml和gemfile。没别了。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我自己找到了一个hacky解决方案:

将环境变量TZ中的服务器时区设置为“UTC”。为了保持这个配置选项,我决定将环境变量设置放在config / boot.rb中:

ENV['TZ'] = "UTC"

我仍然觉得很脏,这个解决方案仍然让我有了意志。所以任何更好/更清洁的解决方案都非常受欢迎!