Comment puis-je savoir quelles sont les années bissextiles entre 2014 et 2020 dans un terminal Linux?
Existe-t-il un moyen d'utiliser un code tel que $cal
- quelque chose qui indique d'emblée les années bissextiles entre 2014 et 2020?
Vous pouvez utiliser le code de sortie de date
pour vérifier une année bissextile, en vous fiant au comportement de date
de générer un code de sortie autre que 0 pour une date non valide.
date -d $year-02-29 &>/dev/null
echo $?
en tant que fonction:
isleap() { date -d $1-02-29 &>/dev/null && echo is leap || echo is not leap; }
Usage:
$ isleap 2019
is not leap
$ isleap 2020
is leap
En ce qui concerne votre question:
Comment puis-je savoir quelles sont les années bissextiles entre 2014 et 2020 dans un terminal Linux?
echo "Leap years between 2014 and 2020:";
for y in {2014..2020}; do
date -d $y-02-29 &>/dev/null && echo $y;
done
Juste une variante de la réponse de @RoVo ...
for a in {2014..2020}
do
date -d $a-02-29 +"%Y" 2>/dev/null
done
date -d $a-02-29 +"%Y" 2> /dev/null
définit la date au 29 février et affiche l'année en ignorant les erreurs éventuelles.
Ici sur Stack Overflow, une solution élégante a été fournie par anubhava :
#!/bin/bash (( !($1 % 4) && ( $1 % 100 || !( $1 % 400) ) )) && echo "leap year" || echo "not a leap" exit 0
Enregistrez ce qui précède dans un fichier texte nommé isleap
name__.
N'oubliez pas de définir l'autorisation d'exécution:
chmod +x isleap
Essaye-le:
$ ./isleap 1900
not a leap
$ ./isleap 2000
leap year
Si vous ne voulez pas vous fier à certaines propriétés "mystérieuses" accidentelles des années bissextiles (telles que leur divisibilité, le nombre de jours dans une année ou l'existence d'un jour spécifique), vous devez utiliser un langage de programmation avec une bibliothèque de calendriers appropriée. une fonction. Je recommande Python’s calendar.isleap()
1, 2:
#!/usr/bin/python3
import sys
import traceback
import calendar
try:
year = int(sys.argv[1])
is_leap = calendar.isleap(year)
except:
traceback.print_exc()
sys.exit(2)
print(is_leap) # Print the year’s leap status
sys.exit(not is_leap) # Exit program with "success" if leap and "failure" otherwise
Usage:
$ python3 is_leap.py 2000
True
$ python3 is_leap.py 2100
False
Ou en une ligne (sans traitement correct des erreurs):
$ python3 -c 'import sys, calendar; print(calendar.isleap(int(sys.argv[1])))' 2000
True
$ python3 -c 'import sys, calendar; sys.exit(not calendar.isleap(int(sys.argv[1])))' 2000
$ echo $?
0
1 Je suis sûr qu’il existe une solution simple et équivalente à Perl.
2 Le module calendar
de Python utilise le calendrier proleptique grégorien , i. e. il prolonge indéfiniment le calendrier G. dans le passé et le futur. Il ne tient pas compte du fait que le calendrier G. n’est entré en vigueur qu’en 1582 ou que certains paramètres régionaux continuent d’utiliser d’autres calendriers avec des règles différentes pour les années bissextiles. Si vous avez besoin d'assistance pour d'autres calendriers, e. g. calendrier Julian, je vous recommande d'installer et d'utiliser un module d'extension approprié Python.