require "date" p Date.new(2015, 2, 29) #=> `new': invalid date (ArgumentError)
存在しない日付でDateオブジェクトを作ろうとするとArgumentError
で死んでしまうので、Dateオブジェクトを作る前に日付が存在するか知りたい。
Date.valid_date?を使う
Date.valid_date?(year, mon, mday, start = Date::GREGORIAN) -> bool
p Date.valid_date?(2015, 2, 29) #=> false p Date.valid_date?(2016, 2, 29) #=> true
↓
require "date" def putDate(y, m , d) p Date.new(y, m, d).to_s if Date.valid_date?(y, m, d) end putDate(2015, 2, 29) # 何も出力されない putDate(2016, 2, 29) #=> "2016-02-29"
おまけ
p Time.new(2016, 2, 29).to_s #=> "2016-02-29 00:00:00 +0900" p Date.new(2016, 2, 29).to_s #=> "2016-02-29" p Time.new(2015, 2, 29).to_s #=> "2015-03-01 00:00:00 +0900" p Date.new(2015, 2, 29).to_s #=> `new': invalid date (ArgumentError)
Timeだと次の日になるのにむしろ驚いたw
p Time.new(2015, 2, 31).to_s #=> "2015-03-03 00:00:00 +0900" p Time.new(2015, 2, 32).to_s #=> initialize': argument out of range (ArgumentError)
ただ、31日より大きい日を与えるとエラーになるっぽい
[参考]
RWBY Volume1 Original Soundtrack VOCAL ALBUM
- アーティスト: RWBY
- 出版社/メーカー: ワーナー・ホーム・ビデオ
- 発売日: 2015/11/11
- メディア: CD
- この商品を含むブログ (1件) を見る