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,这就是数据被抛出的原因。