【发布时间】:2018-11-07 18:15:14
【问题描述】:
有没有一种方法可以让 Postgres(我使用 Navicat,但将通过命令行工具演示)在时区和 UTC 方面表现得与 Rails 一样?
Rails 似乎做了一些让 Postgres 以 UTC 方式运行的魔法;而通过命令行(或 Navicat)它正在使用我的系统时区。这很令人困惑,因为结果会根据我是在 Ruby/Rails 还是在控制台中执行查询而有所不同。
我仍然在 Postgres 中与时区作斗争,但是让 Rails 和控制台表现出不同的行为令人抓狂。我可以解决这个问题吗?
这里是一个例子(不同的输出值):
-- in postgress:
# select ('2018-11-06' at time zone 'utc')::timestamptz;
timezone
------------------------
2018-11-06 08:00:00-08
(1 row)
-- in rails console
> ApplicationRecord.execute("select ('2018-11-06' at time zone 'utc')::timestamptz").first
(0.5ms) select ('2018-11-06' at time zone 'utc')::timestamptz
=> #<OpenStruct timezone="2018-11-06 00:00:00+00">
它们的格式都不同(-00 vs -08),更令人困惑的是,它们返回的实际时间不同。
Postgres 示例比 Rails 提前 16 小时返回结果!
【问题讨论】:
标签: ruby-on-rails ruby postgresql navicat