Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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--按天对项目进行分组,并在一天的开始位置移动_Ruby On Rails_Arrays_Ruby_Datetime_Dictionary - Fatal编程技术网

Ruby on rails Ruby--按天对项目进行分组,并在一天的开始位置移动

Ruby on rails Ruby--按天对项目进行分组,并在一天的开始位置移动,ruby-on-rails,arrays,ruby,datetime,dictionary,Ruby On Rails,Arrays,Ruby,Datetime,Dictionary,我有一本这样的词典: {"status": "ok", "data": [{"temp": 22, "datetime": "20160815-0330"}]} 20160815-0330表示2016-08-15 03:30。我想按天进行分组并计算最低和最高温度,但这一天应该从09:00开始,到08:59结束。我怎么能这么做 这是我的密码: @results = @data['data'].group_by { |d| d['datetime'].split('-')[0] }.map do

我有一本这样的词典:

{"status": "ok", "data": [{"temp": 22, "datetime": "20160815-0330"}]}
20160815-0330
表示
2016-08-15 03:30
。我想按天进行分组并计算最低和最高
温度
,但这一天应该从09:00开始,到08:59结束。我怎么能这么做

这是我的密码:

@results = @data['data'].group_by { |d| d['datetime'].split('-')[0] }.map do |date, values|
  [date, {
    min_temp: values.min_by { |value| value['temp'] || 0 }['temp'],
    max_temp: values.max_by { |value| value['temp'] || 0 }['temp']
  }]
end

#=> {"20160815"=>{:min_temp =>12, :max_temp =>34}}

我可以工作,但起点是00:00,而不是09:00。

我建议使用时区技巧:

def adjust_datetime(str)
  DateTime.parse(str.sub('-', '') + '+0900').utc.strftime('%Y%m%d')
end

data.group_by { |d| adjust_datetime(d['datetime']) }
下面是一个解释:

str = '20160815-0330'
str = str.sub('-', '')   #=> '201608150330'
str = str + '+0900'      #=> '201608150330+0900'
dt = DateTime.parse(str) #=> Mon, 15 Aug 2016 03:30:00 +0900
dt = dt.utc              #=> 2016-08-14 18:30:00 UTC
dt.strftime('%Y%d%m')    #=> '20160814'

是从0900开始到第二天0859结束吗?是的,没错。谢谢Danil。它似乎增加了9小时,对吗?数据输出与它应该的不匹配。所以每次迭代要加9小时?或者取日期时间开始时间或0000,然后再加上0900?我想我的意思是开始一天。我想我要问的是,是否有必要将一天的开始时间从0:00改为9:00,结束时间从23:59改为8:59。这是正确的答案。我的错误是没有意识到开始时间必须是9:01,这就是数据被抛出的原因。