Високосные годы
Надеюсь, вы отлично встретили новый год, и сейчас у вас отличное праздничное настроение. По крайней мере у меня это именно так — мы не пили никакого алкоголя, и чокнулись в полночь бокалами с водой из пятилитровой канистры, поэтому мы проснулись, погуляли, и тут я вспомнил одно из вчерашних поздравлений с Новым годом:
Желаю, чтобы в конце каждого года ты, вспоминая то, что было за последние 366 if ((year%4 == 0 and year%100 != 0) or (year%400 == 0)) else 365 дней, думал про себя:
— Ох, нифига себе, какой был экшен. Обязательно буду рассказывать внукам или напишу об этом потом книгу.
Итак, выше достаточно простой inline-способ определить количество дней в году (переменная year), который, по сути, полностью раскрывает их суть: в григорианском календаре високосными годами считаются те годы, порядковый номер которых либо кратен 4, но при этом не кратен 100, либо кратен 400. Иными словами, если год делится на 4 без остатка, но делится на 100 только с остатком, то он високосный, иначе — невисокосный, кроме случая, если он делится без остатка на 400 — тогда он всё равно високосный.
Например, 2013 год невисокосный, 1700, 1800 и 1900 — опять же невисокосные годы, а вот 2000, 2004, 2008 и 2012 — високосные.
Но что, если мы не помним, сколько дней в високосных (366 дней) и невисокосных (365 дней) годах, или просто хотим написать определение количества дней в году максимально быстро? Можно ли сделать так на Python? Конечно же, можно.
Итак, в Python есть модуль calendar. Он как раз отлично подходит для того, чтобы узнать, является ли тот или иной год високосным (или, например, сколько високосных годов в определённом интервале), определить количество дней в месяце, получить номер дня недели для определённой даты и так далее.
В частности, мы можем получить количество дней в каждом месяце года, и просто сложить.
Функция calendar.monthrange принимает номер года в качестве первого аргумента и номер месяца в качестве второго аргумента. Возвращает номер дня недели первого числа данного месяца и количество дней в данном месяце:
Соответственно, мы можем подсчитать общее количество дней для всех 12 месяцев, и получить таким образом количество дней для данного года:
Но если подумать о том, как именно выполняется эта строка, становится очевидно, что это решение очень неэффективно, если нужно посчитать количество дней для большого количества годов.
Проверяем с помощью модуля timeit.
На то, чтобы выполнить её 1 миллион раз, требуется 13.69 секунд, если import calendar делается один раз в начале. Если import calendar делается каждый раз, тогда 14.49 секунд.
Теперь попробуем другой вариант. Он требует знания того, сколько дней в високосных и невисокосных годах, но зато он очень короткий:
И, как легко догадаться, он уже намного быстрее: 0.83 секунд, включая import calendar, и 0.26 секунд, если import calendar делается один раз в начале.
Давайте также посмотрим, сколько требуется времени самому первому варианту, с «ручным» подходом: 0.07 секунд для 2012 и 2013 и 0.12 секунд для 2000 (думаю, всем понятно, откуда берётся такая разница в скорости для этих годов).
Получается, что это и есть самый быстрый вариант из этих трёх:
Конечно, в большинстве случаев вы можете использовать любой из этих вариантов — в конце концов, при определении количества дней в одном, двух, десяти или ста годах вы вряд ли почувствуете какую-либо разницу.
Пишите, оптимизируйте, улучшайте, тестируйте и считайте производительность — но не забывайте о читаемости исходников ваших программ.
С Новым годом! Удачи, счастья, радости и самосовершенствования в новом году.
Метод определения високосного года
В этой статье описывается, как определить, является ли год в дате, используемой в документе Microsoft Excel, високосным.
Дополнительная информация
Система дат, используемая Excel, основана на григорианском календаре, впервые установленном в 1582 году папой римским Григорием XIII. Этот календарь был разработан для исправления ошибок, привнесенных менее точным юлианским календарем.
В григорианском календаре обычный год состоит из 365 дней. Поскольку фактическая продолжительность звездного года (период обращения Земли вокруг Солнца) составляет 365.2425 дней, «високосный год» в 366 дней используется один раз каждые четыре года для устранения ошибки, вызванной тремя обычными (но короткими) годами. Любой год, который делится на 4 без остатка, является високосным годом: например, 1988, 1992 и 1996 годы являются високосными годами.
Тем не менее, есть еще небольшая ошибка, которая должна быть учтена. Чтобы устранить эту ошибку, григорианский календарь предусматривает, что год, который делится без остатка на 100 (например, 1900) является високосным годом только в том случае, если он также без остатка делится на 400.
По этой причине следующие годы не являются високосными:
1700, 1800, 1900, 2100, 2200, 2300, 2500, 2600
Это потому, что они делятся без остатка на 100, но не на 400.
Следующие годы – високосные: 1600, 2000, 2400
Это потому, что они делятся без остатка на 100 и 400.
Поскольку версии Microsoft Excel, более ранние, чем Excel 97, обрабатывают только годы с 1900 по 2078 год, только для 1900 года действует правило исключения 100/400 високосных лет в Microsoft Excel. Однако для совместимости с другими программами Microsoft Excel рассматривает 1900 год как високосный.
Как определить, является ли год високосным
Чтобы определить, является ли год високосным, выполните следующие действия:
- Если год делится на 4 без остатка, перейдите на шаг 2. В противном случае перейдите к выполнению действия 5.
- Если год делится на 100 без остатка, перейдите на шаг 3. В противном случае перейдите к выполнению действия 4.
- Если год делится на 400 без остатка, перейдите на шаг 4. В противном случае перейдите к выполнению действия 5.
- Год високосный (366 дней).
- Год не високосный год (365 дней).
Формула, чтобы определить, является ли год високосным
Используйте следующую формулу, чтобы определить, является ли номер года, который вводится в ячейку (в данном примере, ячейка A1), високосным годом:
Как высчитывать високосные годы
В создании этой статьи участвовала наша опытная команда редакторов и исследователей, которые проверили ее на точность и полноту.
Команда контент-менеджеров wikiHow тщательно следит за работой редакторов, чтобы гарантировать соответствие каждой статьи нашим высоким стандартам качества.
Количество просмотров этой статьи: 34 058.
В високосном году содержится один дополнительный день. В обычном году примерно 365,24 дней, поэтому каждые четыре года нужно добавлять один дополнительный день. Это необходимо, чтобы не отстать от года на несколько часов. Вычислить високосные годы довольно легко, но нужно запомнить несколько специальных правил. Если вы не любите делать расчеты, просто посмотрите в календарь.
![]()
- Например, проверьте 1997 или 2012 (как прошлый год), или 2019 (как текущий год), или 2025, или 2028 (как будущий год).
![]()
- Например, 1997/4 = 499,25. Получилась десятичная дробь, поэтому 1997 не является високосным годом.
- 2012/4 = 503. Получилось целое число, поэтому 2012, скорее всего, високосный год.
![]()
- Например, 2012 делится на 4 и не делится на 100 (2012/100 = 20,12). Поэтому 2012 год определенно является високосным.
- 2000 делится на 4 и на 100 (2000/4=500 и 2000/100=20). Это означает, что 2000 год может не быть високосным, поэтому выполните еще одно вычисление.
![]()
- Например, 1900 делится нацело на 100, но не делится на 400 (199/400=4,75). Это означает, что 1900 год не является високосным.
- С другой стороны, 2000 делится нацело на 100 и на 400 (2000/400=5). Это означает, что 2000 год является високосным.
Подсказка: если вы не хотите делить число вручную или не уверены в полученных результатах, воспользуйтесь онлайн-калькулятором високосных годов — он сделает все вычисления. [5] X Источник информации