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},... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |