Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 给定一个日期时间,如何获得特定时区中相同日期的时间范围?_Ruby On Rails_Ruby_Datetime_Timezone - Fatal编程技术网

Ruby on rails 给定一个日期时间,如何获得特定时区中相同日期的时间范围?

Ruby on rails 给定一个日期时间,如何获得特定时区中相同日期的时间范围?,ruby-on-rails,ruby,datetime,timezone,Ruby On Rails,Ruby,Datetime,Timezone,我有一个DateTime对象表示一个特定的日期,如“2011-01-15 00:00:00 UTC”中表示1月15日。我想在一个特定的时区中生成一个日期相同的时间范围 方法签名可能类似于 def day_range_for(date, tz) # ... end 例如,如果我有(DateTime.parse('2011-01-15'),'CST')的range\u,那么我希望结果是一个类似于2011-01-15 00:00:00-0600的范围。。2011-01-15 23:59:59-0

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

方法签名可能类似于

def day_range_for(date, tz)
  # ...
end
例如,如果我有(DateTime.parse('2011-01-15'),'CST')的
range\u,那么我希望结果是一个类似于
2011-01-15 00:00:00-0600的范围。。2011-01-15 23:59:59-0600

怎么样:

def day_range_for date, zone
  (DateTime.new(date.year,date.month,date.day,0,0,0,zone)..DateTime.new(date.year,date.month,date.day,23,59,59,zone))
end

day_range_for(DateTime.parse('2011-01-15'), 'CST')
#=> #<DateTime: 2011-01-15T00:00:00-06:00 (9822307/4,-1/4,2299161)>..#<DateTime: 2011-01-15T23:59:59-06:00 (212161917599/86400,-1/4,2299161)> 
日期、区域的定义日期范围 (DateTime.new(date.year,date.month,date.day,0,0,0,zone)…DateTime.new(date.year,date.month,date.day,23,59,59,zone)) 结束 日期范围(DateTime.parse('2011-01-15'),'CST') #=> #..#
您能接受输入字符串而不是对象吗?如果传入DateTime对象,这有点违反直觉,因为该对象所代表的时间不是您要查找的实际时间。如果您输入了正确的绝对日期时间,或者字符串本身,那么它将符合我的期望。问题的实质完全由ActiveSupport处理,我认为您正在使用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  

澄清;这个
范围(DateTime.parse('2011-01-15'),'EET')
输出是什么?我收集到EET是UTC+2,所以这将是
('2011-01-15 00:00:00+0200..2011-01-15 11:59:59+0200')
。你的意思是
23:59:59
?从一天的开始到结束?这看起来很合理。非常感谢你!我无法访问tz时区格式,只能访问GMT时间偏移量,如“+5:45”。如何将偏移时间转换为tz时区?@zoras:如果您引用此方法调用,
DateTime.new
也接受
'+5:45'
作为时区参数。