Ruby从变量值获取天,小时和分钟

时间:2017-06-10 04:53:57

标签: ruby ruby-on-rails-5

我对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

非常感谢任何帮助。

3 个答案:

答案 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中的方法一起使用,以提取感兴趣的信息(年,星期几,小时,分钟等)。

时间在内部存储为自纪元以来的秒数。我执行了以下步骤。

  • 使用类方法Time::now来获取一个实例(new_time),该实例表示(但不等于)自纪元以来的秒数;
  • 调用实例方法Time#+,它将时间对象转换为秒并将其添加到其参数,也就是秒,并返回秒(从纪元开始);和
  • 使用类方法Time::at将该总和转换回Time实例。