Como posso descobrir quais são os anos bissextos entre 2014 e 2020 em um terminal Linux?
Existe alguma maneira de usar algum código como $cal
- algo para mostrar quais anos são anos bissextos entre 2014 e 2020 imediatamente?
command-line
time
lee
fonte
fonte
Respostas:
Você pode usar
date
o código de saída de para verificar um ano bissexto, contando comdate
o comportamento de gerar um código de saída diferente de 0 para uma data inválida. Obviamente, não há 29 de fevereiro em um ano sem bissextos:Como uma função:
Uso:
Quanto à sua pergunta:
fonte
Apenas uma variante da resposta de @ RoVo ...
date -d $a-02-29 +"%Y" 2> /dev/null
define a data para 29 de fevereiro e imprime o ano, ignorando quaisquer erros que ocorram.fonte
seq -f "%g-02-29" 2014 2020 | date -f- +"%Y" 2>/dev/null
Aqui no Stack Overflow, uma solução elegante foi fornecida pelo anubhava :
Salve o acima em um arquivo de texto chamado
isleap
.Não se esqueça de definir a permissão de execução:
Teste-o:
fonte
date
comando são hacks.Se você não quiser confiar em algumas propriedades "arcanas" incidentais dos anos bissextos (como a divisibilidade, o número de dias em um ano ou a existência de um dia específico), use uma linguagem de programação com uma biblioteca de calendário apropriada função. Eu recomendo o Python 1, 2 :
calendar.isleap()
Uso:
Ou como uma linha (sem tratamento adequado de erros):
1 Tenho certeza de que existe uma solução Perl equivalente simples.
2 O
calendar
módulo Python usa o calendário gregoriano proléptico , ou seja, estende o calendário G. indefinidamente no passado e no futuro. Não leva em conta que o calendário G. entrou em vigor apenas em 1582 ou que alguns locais continuam usando outros calendários com regras diferentes para o ano bissexto. Se você precisar de suporte para outros calendários, por exemplo, o calendário juliano, recomendo que você instale e use um módulo de extensão Python apropriado.fonte
def isleap(year):
"""Return True for leap years, False for non-leap years."""
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
. Mesmo fct. como usado em askubuntu.com/a/1081237/790920