加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何从一个范围返回一系列日期和小时?

发布时间:2020-12-17 03:46:52 所属栏目:百科 来源:网络整理
导读:如何从一个范围返回一系列日期和小时?到目前为止,我尝试过: (48.hours.ago..Time.now.utc).map { |time| { :hour = time.hour } }.uniq 返回: [{:hour=1},{:hour=2},{:hour=3},{:hour=4},{:hour=5},{:hour=6},{:hour=7},{:hour=8},{:hour=9},{:hour=10},{
如何从一个范围返回一系列日期和小时?到目前为止,我尝试过:

(48.hours.ago..Time.now.utc).map { |time| { :hour => time.hour } }.uniq

返回:

[{:hour=>1},{:hour=>2},{:hour=>3},{:hour=>4},{:hour=>5},{:hour=>6},{:hour=>7},{:hour=>8},{:hour=>9},{:hour=>10},{:hour=>11},{:hour=>12},{:hour=>13},{:hour=>14},{:hour=>15},{:hour=>16},{:hour=>17},{:hour=>18},{:hour=>19},{:hour=>20},{:hour=>21},{:hour=>22},{:hour=>23},{:hour=>0}]

不理想,因为它每秒迭代一次.这需要很长时间.我收到几条警告信息说:

/Users/Chris/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.2.2/lib/active_support/time_with_zone.rb:328: warning: Time#succ is obsolete; use time + 1

我试图返回类似的东西:

[{:day => 25,:hour=>1},{:day => 25,:hour=>2},:hour=>3},:hour=>4} ... {:day => 26,{:day => 26,:hour=>4}]

解决方法

使用 Range#step,但作为预防措施,首先将日期转换为整数(显然是 ranges using integers have step() optimized-YMMV).作为一种风格问题,我也首先截断到小时.

这是一些快速的’n’脏代码:

#!/usr/bin/env ruby

require 'active_support/all'

s=48.hours.ago
n=Time.now

st=Time.local(s.year,s.month,s.day,s.hour).to_i
en=Time.local(n.year,n.month,n.day,n.hour).to_i

result = (st..en).step(1.hour).map do |i|
  t = Time.at(i)
  { day: t.day,hour: t.hour }
end

puts result.inspect

产量:

[{:day=>25,:hour=>11},{:day=>25,:hour=>12},:hour=>13},:hour=>14},:hour=>15},:hour=>16},...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读