我对Ruby更新,并且正在尝试弄清楚如何在哈希中获取值并将其转换为天,小时和分钟。基本上我要做的就是创建一个未来的时间量,添加到DateTime.now
。然而不幸的是,天,小时和分钟的转换似乎是以毫秒为单位;不是我所期待的。
代码
puts "date_hash #{date_hash}"
puts "days #{date_hash['days']} - #{date_hash['days'].days}"
puts "hours #{date_hash['hours']} : #{date_hash['hours'].hours}"
puts "minutes #{date_hash['minutes']} : #{date_hash['minutes'].minutes}"
# below will not work (yet) until above is correct
# future = date_hash['days'].days + date_hash['hours'].hours + date_hash['minutes'].minutes
# end_date = DateTime.now + future
输出:
date_hash {"days"=>27, "hours"=>1, "minutes"=>13}
days 27 - 2332800 # would expect 27.days
hours 1 : 3600 # would expect 1.hour
minutes 13 : 780 # would expect 13.minutes
非常感谢任何帮助。
答案 0 :(得分:1)
Rails应该能为您提供正确的日期。我唯一看错的是你尝试使用符号(date_hash [:days])而不是字符串(date_hash [' days'])来访问哈希。此外,它有助于了解运行代码时获得的输出。
答案 1 :(得分:1)
days 27 - 2332800 # would expect 27.days hours 1 : 3600 # would expect 1.hour minutes 13 : 780 # would expect 13.minutes
2332800 IS 27.days。在内部,所有持续时间无论如何都以秒表示(因此您可以对它们进行数学运算)。在插值中使用持续时间时,会有一个隐式.to_s
调用将其转换为字符串。看看这个:
27.days # => 27 days
27.days.to_s # => "2332800"
答案 2 :(得分:0)
这是一个纯Ruby解决方案。使用Rails的日期时间方法可能有更好的方法。
f=open('output.txt','r')
print "IP address is ", f.read()
f.close()
然后,时间对象require 'time'
def fast_forward(date_hash)
Time.at(Time.now + 60 *
(60 * (24 * date_hash["days"] + date_hash["hours"]) + date_hash["minutes"]))
end
date_hash = {"days"=>27, "hours"=>1, "minutes"=>13}
Time.now
#=> 2017-06-09 22:43:33 -0700
new_time = fast_forward(date_hash)
#=> 2017-07-06 23:56:35 -0700
可以与班级Time中的方法一起使用,以提取感兴趣的信息(年,星期几,小时,分钟等)。
时间在内部存储为自纪元以来的秒数。我执行了以下步骤。