Rubyでの時刻操作

Rubyでの時刻操作まとめ

  • 基本的にTimeでもDateTimeでもローカルタイムの時刻をとってきてくれるが、明示的にタイムゾーンを指定したい場合はローカルの環境変数ENV['TZ']を『ENV['TZ'] = 'Asia/Tokyo'』のようにしてローカルタイムを一時的に書き換えてやる必要がある(一つの方法として)。日本を指定してもあまり意味はないが、特定の国を指定したいときもあるだろうから憶えておきたい。
  • 一方UTC(「世界標準時」)で表示したい場合はTimeではTime.now.utcのような形で引数で指定した協定世界時のTimeオブジェクトを取得することができる。
irb(main):001:0> Time.now.utc.strftime("%Y-%m-%d %H:%M")
=> "2016-12-14 02:34"
  • UNIXTIME(1414767600)の変換についてもTime.at(1414767600)の形でDATETIMEへの変換が可能unixtimeがミリ秒なのでtime + (usec/1000000) で値を変換しているはず。
irb(main):001:0> Time.at(1472607552).strftime("%Y-%m-%d %H:%M")
=> "2016-08-31 10:39"
  • 日付の加算減算はRubyだと通常active_supportを使って操作するのではないかと思うがDateTimeを使えば+1のような形で日付を加算できる。1/24加算すれば1時間進めることも可能。
irb(main):001:0>tomorrow = DateTime.now + 1
irb(main):002:0>tomorrow.strftime("%Y-%m-%d %H:%M")
=> "2016-12-15 12:41"