如何在ruby的固定时区获得固定时间?

时间:2015-05-22 19:58:04

标签: ruby-on-rails ruby

我想创建一个Time / DateTime对象,该对象始终代表纽约"上午8点,而不管DST。我怎样才能做到这一点?

Rails文档中的一个建议是使用

Time.zone = 'Eastern Time (US & Canada)'

以下列方式

around_filter :set_time_zone

def set_time_zone
  if logged_in?
    Time.use_zone(current_user.time_zone) { yield }
  else
    yield
  end
end

但我想避免触及线程变量(这就是Time.use_zone正在做的事情)

2 个答案:

答案 0 :(得分:1)

嗯,你可以这样解决问题:

ny = Time.new(Time.now.year,Time.now.month,Time.now.day,8,0,0,"-05:00")

这将返回一个对象ny,该对象在美国东部时间上午8点(纽约)为您执行当天的当天设置。

答案 1 :(得分:1)

试试这个:

ActiveSupport::TimeZone['Eastern Time (US & Canada)'].parse('8:00')

这将处理日光节省时间问题

> eight_am = ActiveSupport::TimeZone['Eastern Time (US & Canada)'].parse('8:00')
=> Fri, 22 May 2015 08:00:00 EDT -04:00

> eight_am.in_time_zone('America/Los_Angeles')
=> Fri, 22 May 2015 05:00:00 PDT -07:00