在Ruby中如何将时间缩短到最接近的15分钟?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

是否有简单的方法将时间缩短到最接近的15分钟?

这是我目前正在做的。有没有更简单的方法来做到这一点?

t = Time.new
rounded_t = Time.local(t.year, t.month, t.day, t.hour, t.min/15*15)
提问于
用户回答回答于

这里有两个代码。

require 'active_support/core_ext/numeric' # from gem 'activesupport'

class Time
  # Time#round already exists with different meaning in Ruby 1.9
  def round_off(seconds = 60)
    Time.at((self.to_f / seconds).round * seconds).utc
  end

  def floor(seconds = 60)
    Time.at((self.to_f / seconds).floor * seconds).utc
  end
end

t = Time.now                    # => Thu Jan 15 21:26:36 -0500 2009
t.round_off(15.minutes)         # => Thu Jan 15 21:30:00 -0500 2009
t.floor(15.minutes)             # => Thu Jan 15 21:15:00 -0500 2009

用户回答回答于

我对ruby的语法不是很熟悉,但是你可以使用modulo来精确到15分钟。我猜想语法会是这样的

t.min - ( t.min % 15)

这将使可能值为0,15,30和45。假设0 <= t.min <= 59。

扫码关注云+社区