- blogs:
- cles::blog
« 散髪しました :: ナチュラルカフェ コンポステラ »
2011/09/18

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

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 を使ってログインすることができます。
« 散髪しました :: ナチュラルカフェ コンポステラ »
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112102)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110741)
3 . 年次の人間ドックへ(110344)
4 . 2023 年分の確定申告完了!(1つめ)(109901)
5 . 三菱鉛筆がラミーを買収(109799)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110741)
3 . 年次の人間ドックへ(110344)
4 . 2023 年分の確定申告完了!(1つめ)(109901)
5 . 三菱鉛筆がラミーを買収(109799)
cles::blogについて
Referrers