試した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
error2
Time.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 件のコメント:
コメントを投稿