红宝石中的时间操纵

Fly*_*FoX 26 ruby time

我想创建一个将来20分10秒的DateTime实例.我在irb中尝试使用Time和DateTime,但似乎无法找到真正有意义的方法.我只能向DateTime对象添加天数,只向Time对象添加秒数.

是不是有一个更好的方法,而不是总是将我想要添加的时间转换为秒?

Fre*_*ung 55

A Time是自纪元以来的秒数,而a DateTime是自纪元以来的天数,这就是为什么添加1到a DateTime会增加一整天.但是,您可以添加一天中的一小部分

d = DateTime.now
d + Rational(10, 86400)
Run Code Online (Sandbox Code Playgroud)

将增加10秒d(因为一天有86400秒).

如果您使用的是Rails,ActiveSupport会添加一些辅助方法,您可以这样做

d + 20.minutes + 10.seconds
Run Code Online (Sandbox Code Playgroud)

哪个做正确的事d是a DateTime或a Time.您可以单独使用ActiveSupport,现在您可以只提供所需的位数.我似乎记得这个东西在里面activesupport/duration.我相信还有一些其他宝石也提供时间处理方面的帮助.

  • 就个人而言,我更喜欢写出"60*60*24"来使它更加明显,即使它在运行时显然会略微变慢. (5认同)

ale*_*lex 5

假设您需要 Active Support 或者您在 Rails 项目中工作。在 Ruby 中执行此操作的一种非常简单易读的方法是:

DateTime + 5.minutes
Time + 5.minutes
Run Code Online (Sandbox Code Playgroud)

也适用于seconds, hours, days, weeks, months, years

  • 请注意,这假设您有 ActiveSupport 或 Rails。 (20认同)