如何更改ActiveRecord时区?

时间:2014-08-13 20:38:16

标签: mysql ruby-on-rails activerecord ruby-on-rails-4 timezone

我需要关闭Rails应用程序和Mysql之间的时间转换。

ActiveRecord source的评论说:

  # Timestamps are in UTC by default but you can use the local timezone by setting:
  #
  #   config.active_record.default_timezone = :local

但是,我的服务器使用UTC时区,如果使用:local:utc选项,它就没有区别。所需的时区为'Brasilia'

生产服务器上的Rails控制台显示转换:

$ RAILS_ENV=production bundle exec rails c 
Loading production environment (Rails 4.1.4)
2.0.0 :001 > Time.current
 => Wed, 13 Aug 2014 17:34:15 BRT -03:00 
2.0.0 :002 > Schedule.where(startDateTimeSchedule: Time.current)
  Schedule Load (1.0ms)  SELECT `Schedule`.* FROM `Schedule`  WHERE `Schedule`.`startDateTimeSchedule` = '2014-08-13 20:34:25'

P.S。:关于这个问题的高度投票问题的accepted answer是错误的。

1 个答案:

答案 0 :(得分:0)

您可以在config / application.rb

中设置新的默认时区
config.time_zone = 'Brasilia'

如果您拥有了解时区的用户,您还可以通过将此代码添加到ApplicationController来正确转换它们

around_filter :user_time_zone, :if => :current_user

def user_time_zone(&block)
  Time.use_zone(current_user.timezone, &block)
end