LoginSignup
31
21

More than 3 years have passed since last update.

Ruby の Time でマイクロ秒・秒を切り捨てる

Last updated at Posted at 2014-04-16

追記: Ruby 2.7 からは Time#floor メソッドが追加され、Time.now.floor のようにしてマイクロ秒を
切り捨てることができるようになりました

Ruby の Time インスタンスはマイクロ秒まで保持しているので、データベースや文字列から復元したときに == が false を返す場合がある。

# Rails で MySQL 使ってる場合
@now = Time.now
@article.published_at = @now
@article.save!
@article.published_at == @now # true
@article.reload
@article.published_at == @now # false

下記の 2 つのメソッドを使って、マイクロ秒を切り捨てることができる。

  • Time#to_i UNIX エポックからの秒数を整数で返す
  • Time.at UNIX エポックからの秒数から Time インスタンスを作る
t = Time.at(Time.now.to_i)
t.usec # => 0

応用すれば、秒の切り捨てもできる。

t = Time.new(2013, 4, 4, 12, 34, 56) # => 2013-04-04 12:34:56 +0900

# 秒の切り捨て
SEC_PER_MIN = 60
Time.at(t.to_i / SEC_PER_MIN * SEC_PER_MIN) # => 2013-04-04 12:34:00 +0900

分・時の切り捨てはタイムゾーンが影響するのでこの方法ではうまくいかない。

31
21
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
21