在 Rails 中正确管理时区

Jér*_*Boé 1 timezone ruby-on-rails

我有一个用 RoR 编写的后端,我需要管理来自世界各地不同同行的许多请求。我有以下问题:

  • config.timezone为每个请求更改是否合适?

    • 如果

      • 假设有 2 个请求同时到达我的服务器。两者的时区会不同吗?(意思是,会有两种不同吗config.timezone?)
      • 我找不到任何方法来设置具有所需 UTC 的配置时区,例如Time.zone = 'UTC+X'
    • 如果

      • 您知道有什么方法可以轻松且正确地管理它吗?我有很多时区操作要做,那么在配置中设置它会更容易。

Lum*_*mmo 5

基于此问题的答案: Convert Time from one time zone to another in Rails

由于线程问题,使用 config.timezone 似乎是一个坏主意。

我建议使用 ActiveSupport TimeZone 和 TimeWithZone 类。这允许您按照以下方式执行操作:

# Return the simultaneous time in Time.zone or the specified zone
Time.now.in_time_zone                      # => Tue, 13 Jul 2010 01:20:55 EDT -04:00
Time.now.in_time_zone(Time.zone)           # => Tue, 13 Jul 2010 01:20:55 EDT -04:00
Time.now.in_time_zone("Asia/Vladivostok")  # => Tue, 13 Jul 2010 16:20:55 VLAST +11:00
Time.now.in_time_zone(-3.hours)            # => Tue, 13 Jul 2010 02:20:55 BRT -03:00

# Switch to a given timezone within a block
Time.use_zone "Asia/Vladivostok" do
  Time.zone.now # => Tue, 13 Jul 2010 16:20:55 VLAST +11:00
end
Run Code Online (Sandbox Code Playgroud)

示例代码来自http://ofps.oreilly.com/titles/9780596521424/active-support.html

查看“时区转换”下的内容