Jak mogę dowiedzieć się, które lata przestępne między 2014 a 2020 rokiem znajdują się w terminalu Linux?
Czy jest jakiś sposób na użycie jakiegoś kodu, np. $cal
Cokolwiek, aby od razu pokazać, które lata są latami przestępnymi między 2014 a 2020 rokiem?
command-line
time
zawietrzny
źródło
źródło
Odpowiedzi:
Możesz użyć
date
kodu wyjścia do sprawdzenia roku przestępnego, opierając się nadate
zachowaniu generowania kodu wyjścia innego niż 0 dla niepoprawnej daty, oczywiście nie ma 29 lutego w roku innym niż przestępny:jako funkcja:
Stosowanie:
Jeśli chodzi o twoje pytanie:
źródło
Tylko wariant odpowiedzi @ RoVo ...
date -d $a-02-29 +"%Y" 2> /dev/null
ustawia datę na 29 lutego i drukuje rok, ignorując wszelkie występujące błędy.źródło
seq -f "%g-02-29" 2014 2020 | date -f- +"%Y" 2>/dev/null
Tutaj, w przypadku przepełnienia stosu, anubhava zapewniło eleganckie rozwiązanie :
Zapisz powyższe w plikach tekstowych o nazwie
isleap
.Nie zapomnij ustawić uprawnienia do wykonywania:
Sprawdź to:
źródło
date
polecenia, to hacki.Jeśli nie chcesz polegać na niektórych przypadkowych „tajemnych” właściwościach lat przestępnych (takich jak ich podzielność, liczba dni w roku lub istnienie określonego dnia), powinieneś użyć języka programowania z odpowiednią biblioteką kalendarza funkcjonować. Polecam 1, 2 Python :
calendar.isleap()
Stosowanie:
Lub jako jedna linijka (bez odpowiedniej obsługi błędów):
1 Jestem pewien, że istnieje proste równoważne rozwiązanie Perla.
2
calendar
Moduł Pythona korzysta z proleptycznego kalendarza gregoriańskiego , tzn. Rozszerza kalendarz G. na czas nieokreślony w przeszłość i przyszłość. Nie bierze pod uwagę, że kalendarz G. wszedł w życie dopiero w 1582 roku, ani że niektóre lokalizacje nadal używają innych kalendarzy z różnymi regułami dotyczącymi roku przestępnego. Jeśli potrzebujesz wsparcia dla innych kalendarzy, np. Kalendarza juliańskiego, zalecamy zainstalowanie odpowiedniego modułu rozszerzenia Python i korzystanie z niego.źródło
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)
. Ten sam fct. jak używany w askubuntu.com/a/1081237/790920