2017-09-01 103 views
0
一天

的轉變開始,我有一本字典這樣:紅寶石 - 按天分組項目與

{"status": "ok", "data": [{"temp": 22, "datetime": "20160815-0330"}]} 

20160815-0330意味着2016-08-15 03:30。我想分組並計算最小和最大temp,但一天應該開始於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。

+0

是否從9時開始和結束在0859第二天? – EJ2015

+0

是的,這是正確的。 – DollarChills

回答

1

我會建議使用一個時區招:

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' 
+0

謝謝達尼爾。這似乎是在9時加入是這樣嗎? – DollarChills

+0

數據輸出與其應該不匹配。所以每次迭代增加9小時?或者採取日期時間開始時間或0000並加入0900?我想我的意思是beginning_of_day()。 – DollarChills

+0

我想我要問的是,無論如何要將beginning_of_day從0:00改爲9:00,end_of_day從23:59:59改爲8:59。 – DollarChills