如何在 Rails 中获取 UTC 偏移量?
Posted
技术标签:
【中文标题】如何在 Rails 中获取 UTC 偏移量?【英文标题】:How can I get the utc offset in Rails? 【发布时间】:2011-07-26 03:56:15 【问题描述】:我需要指定时区的 UTC 偏移量。
【问题讨论】:
【参考方案1】:如果您需要考虑夏令时,您可以使用以下方法:
Time.now.in_time_zone('America/New_York').utc_offset
【讨论】:
谢谢。这让我得到了Time.zone.utc_offset
没有的正确偏移量。
@GregDubicki 在 Rails 的ActiveSupport::TimeWithZone
这个答案比 Time.zone.utc_offset
效果更好,它莫名其妙地不考虑夏令时。【参考方案2】:
require 'time'
p Time.zone_offset('EST') #=> -18000 #(-5*60*60)
【讨论】:
Time.zone.utc_offset 拯救了我的一天 =) 不要忘记,为了使其正常工作,您必须在 application.rb 中设置config.time_zone = 'Berlin'
和 config.active_record.default_timezone = 'Berlin'
(在我的情况下,没有它不会反映夏令时正确调整)
@Charles,我必须将 config.active_record.default_timezone
更改为 :local
而不是 'Santiago'
,否则每个 DateTime 字段都会更改为 nil。 Time.zone_offset
会正确处理夏令时吗?
卢卡斯对答案的评论是最好的......如果您依赖于发生这种情况时更改的偏移量,那么 steenslag 的建议会被夏令时所困扰。 (在这种情况下,EST 与 EDT)。
Time.now.utc_offset
也适用于 DST,而 Time.zone.utc_offset
则不适用。【参考方案3】:
Time.now.in_time_zone('Europe/London').formatted_offset
# => "+01:00"
对于一个可以说更有用的字符串...
【讨论】:
【参考方案4】: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
【讨论】:
这是我一开始就想要的,一个 -N 偏移量!【参考方案5】:如果你有一个ActiveSupport::TimeWithZone
对象,你可以在它上面调用time_zone.utc_offset
。所以,例如,Time.zone.now.time_zone.utc_offset
。
编辑:您还可以对普通的 Time
对象使用 gmt_offset
实例方法。
【讨论】:
【参考方案6】:如果您将用户的时区存储为Time.zone.name
字符串,例如'Eastern Time (US & Canada)'
,如http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html 中所述,并且想要获取时区偏移量,您可以这样做:
ActiveSupport::TimeZone.new(user.time_zone).utc_offset / 3600
# => -5
【讨论】:
请记住,此解决方案仅返回规范偏移量,不考虑夏令时。所以,为了安全起见,最好使用Time.now.in_time_zone(user.time_zone).utc_offset / 3600
【参考方案7】:
我使用Time.zone.utc_offset / 1.hour
以小时为单位获取偏移量(例如:-8
表示旧金山)
【讨论】:
【参考方案8】:只是为了完成这里的循环,我现在使用:
@course.start.utc_offset/60/60
以获得所需的小时数。 Jquery 倒计时在其timezone
参数中只需要-5 或+3。
欢迎您的谷歌。
【讨论】:
以上是关于如何在 Rails 中获取 UTC 偏移量?的主要内容,如果未能解决你的问题,请参考以下文章