ruby-on-rails – 给定DateTime,如何获得特定时区中具有相同日期的时间范围?

我有一个表示特定日期的DateTime对象,如“2011-01-15 00:00:00 UTC”代表1月15日.我想在特定时区生成具有相同日期的时间范围.

方法签名可能就像是

def day_range_for(date, tz)
  # ...
end

例如,如果我有range_for(DateTime.parse(‘2011-01-15′),’CST’),那么我希望结果是2011-01-15 00:00:00 -0600之类的范围. 2011-01-15 23:59:59 -0600

最佳答案 你可以取输入字符串而不是对象吗?如果你传入一个DateTime对象,它有点直观,因为对象所代表的时间不是你要查找的实际时间.如果您传入正确的绝对DateTime或字符串本身,它将符合我的期望.该问题的实际内容完全由ActiveSupport处理,我认为你使用它是因为你用Rails标记了这个问题.这看起来怎么样?

def range_for(input, tz=nil)
    if tz.is_a?(String)
        tz = ActiveSupport::TimeZone.new(tz)
    else
        tz = Time.zone
    end
    if input.acts_like?(:date) || input.acts_like?(:time)
        d = input.in_time_zone(tz)
    else
        d = tz.parse(input)
    end
    return d.beginning_of_day..d.end_of_day
end

看一看:

ruby-1.9.2-p0 > range_for('2011-01-15', 'Alaska')
 => Sat, 15 Jan 2011 00:00:00 AKST -09:00..Sat, 15 Jan 2011 23:59:59 AKST -09:00 
ruby-1.9.2-p0 > range_for(Time.zone.now)
 => Mon, 10 Jan 2011 00:00:00 EST -05:00..Mon, 10 Jan 2011 23:59:59 EST -05:00 
ruby-1.9.2-p0 > range_for('2011-01-15', 'EST')
 => Sat, 15 Jan 2011 00:00:00 EST -05:00..Sat, 15 Jan 2011 23:59:59 EST -05:00  
点赞