关于这个主题的高投票问题的公认答案是错误的。
我需要关闭Rails应用程序和Mysql之间的时间转换。
ActiveRecord源的注释说:
# 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'
注:
你可以在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