Программирование на языке Ruby.

7.12. Проверка года на високосность.

В классе Date есть два метода класса julian_leap? и gregorian_leap?, но только последний применим к относительно недавнему времени. Есть также метод leap?, но это просто синоним gregorian_leap?.

Require "date".

Flag1 = Date.julian_leap? 1700    # true.

Flag2 = Date.gregorian_leap? 1700 # false.

Flag3 = Date.leap? 1700           # false.

Любой ребенок знает первое правило проверки на високосность: год должен делиться на 4. Меньшее число людей знают второе правило: год не должен делиться на 100. И уж совсем немногие знают про исключение из второго правила: если год делится на 400, то он високосный. Таким образом, последний год тысячелетия является високосным, только если делится на 400; так, 1900 год не был високосным, а 2000 был. (Эта поправка необходима, потому что в году не ровно 365.25 дней, а приблизительно 365.2422.).

В классе Time нет аналогичного метода, но при желании его легко можно добавить.

Class Time.

 def Time.leap? Year.

  if year % 400 == 0.

   true.

  elsif year % 100 == 0.

   false.

  elsif year % 4 == 0.

   true.

  else.

   false.

 end.

End.

Я привел этот код только для того, чтобы прояснить алгоритм; конечно, гораздо проще вызвать метод Date.leap?. В моей реализации это метод класса по аналогии с классом Date, но можно было бы сделать его и методом экземпляра.