Как определить, объединяют ли данный день, месяц и год официальную дату? - PullRequest
1 голос
/ 21 апреля 2011

Учитывая 3 числа: ДД, ММ, ГГГГ, какой самый простой способ узнать, если они объединяют юридическую дату?

Примеры:

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

Ответы [ 3 ]

11 голосов
/ 21 апреля 2011

Вы можете использовать valid_date? Но это 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
4 голосов
/ 21 апреля 2011

Дата имеет метод 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
0 голосов
/ 21 апреля 2011

Один из вариантов - использовать что-то вроде:

require 'time'

def valid(year,month,day)
   Time.parse "#{year}#{month}#{day}" rescue return false
   return true
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...