1

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

通过 PUT 发送到 rails: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。没有为我改变任何东西。

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

有任何想法吗?

4

1 回答 1

2

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

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

ENV['TZ'] = "UTC"

我仍然觉得很脏,这个解决方案仍然让我感到不安。因此,任何更好/更清洁的解决方案都受到高度赞赏!

于 2012-02-16T19:12:30.317 回答