我想要的简单方法是在数据库中以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。没别了。
有什么想法吗?
答案 0 :(得分:2)
我自己找到了一个hacky解决方案:
将环境变量TZ中的服务器时区设置为“UTC”。为了保持这个配置选项,我决定将环境变量设置放在config / boot.rb中:
ENV['TZ'] = "UTC"
我仍然觉得很脏,这个解决方案仍然让我有了意志。所以任何更好/更清洁的解决方案都非常受欢迎!