BLOGTIMES
2011/09/18

Ruby の DateTime で時間の計算をする

  ruby 
このエントリーをはてなブックマークに追加

Ruby の DateTime クラスは DateTime.now + 1 のようにすると1日分日付をプラスできるようになっているのですが、これを1時間単位で上手に計算する方法がないかと思っていろいろ調べてみたところ、Rational を使うと上手くできるというエントリを見つけたのでメモ。

DateTime に月、日、時、分、秒を足す。 - こせきの技術日記

DateTimeに秒を足す方法がなかなか見つからなくて苦労した。結局ActiveSupportのソースから探した。
Rationalを足せば良い。

下記を見ると Float だと誤差が出てしまうような場合でもきちんと計算できているのが確認できると思います。

irb(main):001:0> RUBY_VERSION => "1.8.5" irb(main):002:0> require 'date' => true irb(main):003:0> d = DateTime.parse("2000/1/1 00:00:00") => #<DateTime: 4903089/2,0,2299161> irb(main):004:0> d.to_s => "2000-01-01T00:00:00Z" irb(main):005:0> (d + 1.0/24 ).to_s => "2000-01-01T00:59:59Z" irb(main):006:0> (d + Rational(1,24) ).to_s => "2000-01-01T01:00:00Z"

Rational なんてこれまでほとんど使ったことがないクラスなんですが、こんな使い方をするためのクラスなんですね。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4459
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン