我有一个表示特定日期的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