如何使用ActiveRecord::Base.connection.execute()选择带时区的datetime列?
例如User.first.joined_at => Tue, 31 Jul 2018 05:00:34 MSK +03:00
但是
ActiveRecord::Base.connection.execute("SELECT joined_at FROM users") => {"joined_at"=>"2018-07-31 02:00:34.684659"}
最佳答案
ActiveRecord::Base.connection.execute
无法很好地理解数据库的类型,因此必须自己解析字符串。
这个时间戳应该是UTC格式的,因为这是数据库中的Rails标准。你可以通过Time.zone
:
Time.zone = 'UTC' # Unless your application is already in UTC
t = Time.zone.parse('2018-07-31 02:00:34.684659').in_time_zone('Moscow')
# Tue, 31 Jul 2018 05:00:34 MSK +03:00
或者可以通过
DateTime
(如果字符串中没有嵌入时区,则假定为UTC):DateTime.parse('2018-07-31 02:00:34.684659').in_time_zone('Moscow')
# Tue, 31 Jul 2018 05:00:34 MSK +03:00
关于sql - 时区Rails Postgres,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51801273/