如何替代时间



您好,我正在从事Rails项目。我想要特定区域的时间,我知道我可以使用Time.zone.now但是我想首先设置区域,然后想根据区域获得时间。是否有任何方式,以便在设置区域后可以用Time.zone.now覆盖Time.now方法。

我尝试在Application_controller.rb中创建一个之前的操作,然后定义区域,但是每当我尝试访问时间时。现在,它总是在没有时区域的情况下返回时间。请帮我。提前。

application_controller.rb
def set_current_time_zone
  Time.zone = current_user.time_zone unless current_user.blank?
end

为什么不使用 Time.current?如果您在config.zoneTime.zone中设置了区域,它将为您提供时间区域。

请参阅示例:

2.5.0 :021 > Time.zone = "Tallinn"
  => "Tallinn" 
2.5.0 :022 > Time.current
  => Wed, 21 Feb 2018 20:37:29 EET +02:00 
2.5.0 :023 > Time.zone = "New Delhi"
  => "New Delhi" 
2.5.0 :024 > Time.current
  => Thu, 22 Feb 2018 00:07:38 IST +05:30 

请参阅有关Ruby TimeZones的相应的有关。

希望这会有所帮助

module TimeOverride
  # overriding time to return time accoring to the application configured 
  #  timezone
  # instead of utc timezone
  def now
    super.getlocal(Time.zone.utc_offset)
  end
end
module DateTimeOverride
  # overriding time to return time accoring to the application configured 
  #timezone
  # instead of utc timezone
  def now
    Time.now.to_datetime
  end
end
Time.singleton_class.send(:prepend, TimeOverride)
DateTime.singleton_class.send(:prepend, DateTimeOverride)

这就是我的做法,按照瑞安·贝茨(Ryan Bates(的轨道广播:http://railscasts.com/episodes/106 time-zones-revised

class ApplicationController < ActionController::Base
  around_action :set_time_zone, if: :current_user
  def set_time_zone(&block)
    Time.use_zone(current_user.time_zone, &block)
  end
end

use_zone方法期望一个块,并在该块的持续时间内设置时区。请求完成后,原始时区将退回。

然后,我可以使用time.zone..now,并且它将始终为用户使用正确的time_zone集(Time_zone方法返回用户在其设置或UTC中配置的时区(。在控制器或模型中处理时,所有表格中的所有日期和时间字段也将在当前用户的时区进行处理。

相关内容

  • 没有找到相关文章

最新更新