如何使用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/

10-10 00:09
查看更多