开发者

How to identify if the given day, month, and year, combine a legal date?

Given 3 numbers: DD, MM, YYYY, what is the easiest way to know if they com开发者_如何学Cbine a legal date ?

Examples:

14, 05, 2011     =>     Legal
29, 02, 2011     =>     Illegal
29, 02, 2012     =>     Legal
35, 11, 1989     =>     Illegal
14, 18, 2011     =>     Illegal
14, 00, 2011     =>     Illegal
00, 11, 1979     =>     Illegal
31, 11, 1979     =>     Illegal


You can use valid_date? But it's YYYY, MM, DD:

irb(main):015:0> require 'date'
=> true
irb(main):021:0> Date::valid_date?(2011,05,14)
=> true
irb(main):022:0> Date::valid_date?(2011,02,29)
=> false
irb(main):023:0> Date::valid_date?(2012,02,29)
=> true


Date has a method valid_civil? .

require 'date'
dates = DATA.readlines.map{|line| line.split(', ').map(&:to_i)}
dates.each do |date|
  d, m, y = date
  puts Date.valid_civil?(y, m, d)
end

__END__
14, 05, 2011
29, 02, 2011
29, 02, 2012
35, 11, 1989
14, 18, 2011
14, 00, 2011
00, 11, 1979
31, 11, 1979


One option is to use something like:

require 'time'

def valid(year,month,day)
   Time.parse "#{year}#{month}#{day}" rescue return false
   return true
end
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜