当你尝试:
Time.new(2016, 2, 30)
它将返回下一个有效日期:
2016-03-01 00:00:00 +0900
我预计会出现错误,因为2016-02-30不是有效日期。
这是一个错误吗?
答案 0 :(得分:0)
Time.new
似乎只检查日期值是否在1到31之间。我不确定这是否是错误或功能。至少它是不一致的。
您可以使用Date.valid_date?
来验证日期:
Date.valid_date?(2016, 2, 30) #=> false
Date.valid_date?(2016, 2, 29) #=> true
Date.valid_date?(2015, 2, 29) #=> false
Date.valid_date?(2015, 2, 28) #=> true
同样,如果日期无效,Date.new
会引发ArgumentError
:
Date.new(2016, 2, 30) #=> ArgumentError: invalid date
Date.new(2016, 2, 29) #=> #<Date: 2016-02-29 ...>