代码之家  ›  专栏  ›  技术社区  ›  MikeJ

在Ruby中确定闰年的简单方法?

  •  23
  • MikeJ  · 技术社区  · 15 年前

    有没有一个简单的方法来确定一年是否为闰年?

    9 回复  |  直到 5 年前
        1
  •  52
  •   Mitch Wheat    6 年前

    使用 Date#leap? .

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

    例如

    Date.leap?( 2018 ) # => false
    
    Date.leap?( 2016 ) # => true
    
        2
  •  8
  •   Somnath Muluk    12 年前

    试试这个:

    is_leap_year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0
    
        3
  •  8
  •   lucasarruda    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
    
        4
  •  4
  •   MattC    11 年前

    这是我对练习题的回答,这个问题也问同样的问题。明确地告诉您忽略任何标准库函数,这些函数可以作为练习的一部分来实现。

    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
    
        5
  •  2
  •   sashkello    11 年前
    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)
    
        6
  •  1
  •   Artem Sychov    5 年前

    任何能被4整除的年份都是闰年。但是,仍然有一个小错误必须加以解释。为了消除这个错误,公历规定,一年被100整除(例如1900),只有当它也被400整除时,才是闰年。

    class Date
    
      def self.leap?(year)
        year % 4 == 0 && year % 100 != 0 || year % 400 == 0
      end
    
    end
    
        7
  •  0
  •   Matias Fernandez    9 年前

    这个范围是:

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

    资料来源:Chris Pine学习编程

        8
  •  0
  •   lucasarruda    8 年前

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

    • 第一个/更长版本
    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
    
    • 较短版本

    我们可以用短路或( || ):

    def leap_year?(year)
      year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
    end
    
        9
  •  0
  •   sImAnTiCs    6 年前

    变量 N号 测试和打印需要一年时间 如果是闰年, 如果不是的话。

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