試したrubyのバージョンはこれです。
$ ruby -v ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]
こういうrbファイルを作って実行してみると、こういう実行結果になります。
y = 10001 m = 2 d = 31 h = 0 mm = 0 begin puts Time.local(y, m, d, h, mm, 0) rescue puts 'error1' end begin puts DateTime.parse("#{y}-#{m}-#{d} #{h}:#{mm}:00") rescue puts 'error2' end 実行結果 10001-03-01 00:00:00 +0900 error2Time.localに存在しない日を入れても、次の月の月初に変換してしまうようです。
Time.localに入れる日(d)を32にしてみると、結果が変わります。
y = 10001 m = 2 d = 32 h = 0 mm = 0 begin puts Time.local(y, m, d, h, mm, 0) rescue puts 'error1' end 実行結果 error1日として取りうる値が1-31だから、31まではエラーにならないようですね。
とりあえず日付のチェックはDateTime#parseで実装してしまいました。
Timeのソース見てないけどちゃんと見てみた方がよいかもですね。。
0 件のコメント:
コメントを投稿