Ruby-一天开始时,小组项目的一天开始



我有一个字典:

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

20160815-0330表示2016-08-15 03:30。我想通过 day 进行分组,并计算最小和最大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。

我建议使用时区技巧:

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'

相关内容

最新更新