在rails中正确管理时区

时间:2013-02-01 05:31:51

标签: ruby-on-rails timezone

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

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

    • 如果

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

      • 您知道如何轻松妥善地管理它吗?我有很多时区操作要做,然后在配置中设置它会更容易。

2 个答案:

答案 0 :(得分:4)

根据这个问题的答案: 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

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

在“时区转化”下查看

答案 1 :(得分:1)

为每个请求更改config.timezone不是一个好主意,但是,应根据请求处理时区。

查看优秀& Ruby on Rails的人们在elabs中使用时区来处理时区,以获取有关如何处理多个时区的建议。

Ryan Bates的修订版Time Zones RailsCasts episode是另一个很好的资源。