如何在Rails中获得utc偏移量?

时间:2011-03-30 14:43:23

标签: ruby-on-rails ruby datetime timezone

我需要指定时区的utc偏移量。

7 个答案:

答案 0 :(得分:30)

require 'time'

p Time.zone_offset('EST') #=> -18000  #(-5*60*60)

答案 1 :(得分:28)

如果您需要考虑夏令时,可以使用以下内容:

Time.now.in_time_zone('America/New_York').utc_offset

答案 2 :(得分:9)

my_date_time = DateTime.new(2011, 3, 29, 20)
#=> Tue, 29 Mar 2011 20:00:00 +0000

#will return the same time but with another offset
my_date_time.change(:offset => "+0100")
#=> Tue, 29 Mar 2011 20:00:00 +0100

#will return time for other offset
my_date_time.in_time_zone(-1)
#=>  Tue, 29 Mar 2011 19:00:00 -0100

答案 3 :(得分:5)

如果您有ActiveSupport::TimeWithZone个对象,可以在其上调用time_zone.utc_offset。例如,Time.zone.now.time_zone.utc_offset

编辑:您还可以在普通gmt_offset对象上使用Time实例方法。

答案 4 :(得分:5)

如果您将用户的时区存储为Time.zone.name字符串,例如http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html中列出的'Eastern Time (US & Canada)'字符串,并希望获得时区偏移,则可以执行以下操作:

ActiveSupport::TimeZone.new(user.time_zone).utc_offset / 3600
# => -5

答案 5 :(得分:5)

我使用Time.zone.utc_offset / 1.hour来获取小时数的偏移量(例如:旧金山的-8

答案 6 :(得分:2)

Time.now.in_time_zone('Europe/London').formatted_offset
# => "+01:00"

对于可以说是更有用的字符串...