确定红宝石闰年的简便方法?

时间:2009-10-14 14:20:58

标签: ruby datetime leap-year

是否有一种简单的方法可以确定一年是否是闰年?

9 个答案:

答案 0 :(得分:54)

使用Date#leap?

now = DateTime.now 
flag = Date.leap?( now.year ) 

e.g。

Date.leap?( 2018 ) # => false

Date.leap?( 2016 ) # => true

答案 1 :(得分:8)

试试这个:

is_leap_year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0

答案 2 :(得分:8)

为了您的理解:

def leap_year?(year)
  if year % 4 == 0
    if year % 100 == 0
      if yearVar % 400 == 0
        return true
      end
      return false
    end
    return true
  end
  false
end

这可以写成:

def leap_year?(year)
  (year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0)
end

答案 3 :(得分:4)

这是我对于提出相同问题的exercism.io问题的答案。明确告知您忽略可能在练习中实现它的任何标准库函数。

class Year
  attr_reader :year

  def initialize(year)
    @year = year
  end

  def leap?
    if @year.modulo(4).zero?
      return true unless @year.modulo(100).zero? and not @year.modulo(400).zero?
    end

    false
  end
end

答案 4 :(得分:2)

def leap_year?(num)
 if num%4 == 0 && num%100 != 0  
    true
 elsif num%400 == 0 
    true
 elsif num%4 == 0 && num%100 == 0 && num%400 != 0 
    false
  elsif num%4 != 0 
    false
  end
end 
puts leap_year?(2000)

答案 5 :(得分:1)

可以平均除以4的年份是a年。但是,仍然必须解决一个小错误。为了消除此错误,公历规定只有被100整除的年份(例如1900)也可以是a年,除非它也可以被400整除。

class Date

  def self.leap?(year)
    year % 4 == 0 && year % 100 != 0 || year % 400 == 0
  end

end

答案 6 :(得分:0)

这个需要一个范围:

(starting..ending).each do |year|
  next if year % 4   != 0
  next if year % 100 == 0 && year % 400 != 0
  puts year
end

资料来源:Chris Pine学习编程

答案 7 :(得分:0)

使用尽可能少的比较,您可以这样做:

  • 第一个/更长版本
def leap_year?(year)
  # check first if year is divisible by 400
  return true if year % 400 == 0
  year % 4 == 0 && year % 100 != 0
end
  • 较短版本

我们可以使用短路OR(||)进行相同的检查:

def leap_year?(year)
  year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
end

答案 8 :(得分:0)

变量 n 需要一年的时间来测试并打印 true (如果它是闰年)和 false ,如果不是。

n=gets.to_i 
n%4==0 ? n%100==0 ? n%400 ?(puts true):(puts false) :(puts true) :(puts false)