ruby中的时间操纵
我想创建一个将来20分10秒的DateTime实例。 我在irb中尝试使用Time和DateTime,但似乎无法找到一种真正有意义的方法。 我只能向DateTime对象添加天数,只向Time对象添加秒数。
是不是有一个更好的方法,而不是总是将我想要添加的时间转换为秒?
Time
是自纪元以来的秒数,而DateTime
是自纪元以来的天数,这就是为什么在DateTime
添加1
会增加一整天的原因。 但是,您可以添加一天中的一小部分
d = DateTime.now d + Rational(10, 86400)
将添加10秒到d
(因为一天有86400秒)。
如果您使用的是Rails,ActiveSupport会添加一些辅助方法,您可以这样做
d + 20.minutes + 10.seconds
哪个会做正确的事情是d
是DateTime
或Time
。 您可以单独使用ActiveSupport,现在您可以只提供所需的位数。 我似乎记得这个东西是activesupport/duration
。 我相信还有一些其他gem也提供时间处理方面的帮助。
只需使用有效的支持时间扩展。 与手动尝试相比,它们非常方便且不易出错。 您只需导入所需的模块:
# gem 'activesupport' require 'active_support/core_ext/numeric/time.rb' DateTime.now + 20.minutes
注意:是的,这违反了StackOverflow方面的第三方库,但你不应该避免使用库,因为它们实际上是标准的,可以显着降低风险,并提供更好的代码清晰度。
假设您需要ActiveSupport或者您正在使用Rails项目。 在ruby中执行此操作的一种非常简单的可读方式是:
DateTime + 5.minutes Time + 5.minutes
也适用于.seconds, .hours, .days, .weeks, .month, .years
那么,界面简单明了:
t = Time.now t + (20 * 60 + 10)
如果您想要方便的东西,可以在Time
类中添加方法:
class Time def add_minutes(m) self + (60 * m) end end
但我不认为这更简单:
t = Time.now t.add_minutes(20) + 10