2008-05-27
■[Ruby] DateTime に月、日、時、分、秒を足す。

DateTimeに秒を足す方法がなかなか見つからなくて苦労した。結局ActiveSupportのソースから探した。
Rationalを足せば良い。
require 'date' t = DateTime.now # 1ヶ月後 t >> 1 # 1日後 t + 1 # 1時間後 (1/24日後) t + Rational(1, 24) # 1分後 (1/1440日後) t + Rational(1, 24 * 60) # 1秒後 (1/86400日後) t + Rational(1, 24 * 60 * 60)
秒を足すことばかり考えてたけど、「Ruby DateTime 時間」で検索したらあっさり見つかった。
でもマニュアルにも書いといてほしいです。いっぺんTimeに変換しなくちゃ駄目なのかと思いかけた。
ちなみに、Floatでもいけるかなーと思ったけど、
t = DateTime.new(2040, 1, 1) p (t + 0.5).to_s "2040-01-01T12:00:00+00:00"
これだと誤差がでるみたい。
p (t + 0.5 + Rational(1, 24)).to_s "2040-01-01T12:59:59+00:00" p (t + Rational(1,2) + Rational(1, 24)).to_s "2040-01-01T13:00:00+00:00"
Floatの0.5は約0.5だからなんだろうけど、、間違えそうでおそろしい。
コメントを書く
トラックバック - http://d.hatena.ne.jp/koseki2/20080527/date
リンク元
- 49 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=ハイフン unicode&btnG=検索&lr=lang_ja
- 38 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4DAJP_jaJP267JP268&q=+ 文字列 +
- 29 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=mysql+デッドロック&num=50
- 23 http://reader.livedoor.com/reader/
- 18 http://web.zgo.jp/2008/0313/res102/
- 16 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&hs=OMZ&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=ruby+datetime+civil&spell=1
- 11 http://gdgdlog.net/log/show/6
- 11 http://www.google.co.jp/search?client=firefox-a&rls=org.mozilla:ja-JP:official&channel=s&hl=ja&q=createTempFile+java&lr=lang_ja&btnG=Google+検索
- 9 http://phpspot.org/blog/archives/2008/03/htmljavascriptj.html
- 9 http://www.google.co.jp/search?sourceid=navclient&aq=t&hl=ja&ie=UTF-8&&q=createTempFile+java