我如何检查哪些年份是闰年?

lee*_*lee 20 command-line time

如何在 Linux 终端中找出 2014 年和 2020 年之间的闰年?

有没有办法使用一些代码,比如$cal- 有什么可以直接显示 2014 年到 2020 年之间哪些年份是闰年?

pLu*_*umo 40

您可以使用date的退出代码来检查闰年,依赖于date为无效日期生成非 0 退出代码的行为,显然在非闰年中没有 2 月 29 日:

date -d $year-02-29 &>/dev/null
echo $?
Run Code Online (Sandbox Code Playgroud)

作为一个函数:

isleap() { date -d $1-02-29 &>/dev/null && echo is leap || echo is not leap; }
Run Code Online (Sandbox Code Playgroud)

用法:

$ isleap 2019
is not leap

$ isleap 2020
is leap
Run Code Online (Sandbox Code Playgroud)

关于你的问题:

如何在 Linux 终端中找出 2014 年和 2020 年之间的闰年?

echo "Leap years between 2014 and 2020:";
for y in {2014..2020}; do
    date -d $y-02-29 &>/dev/null && echo $y;
done
Run Code Online (Sandbox Code Playgroud)


小智 9

只是@RoVo 答案的一个变体......

for a in {2014..2020}
do 
  date -d $a-02-29 +"%Y" 2>/dev/null
done
Run Code Online (Sandbox Code Playgroud)

date -d $a-02-29 +"%Y" 2> /dev/null 将 date 设置为 2 月 29 日并打印年份,忽略发生的任何错误。

  • 甚至`seq -f "%g-02-29" 2014 2020 | 日期 -f- +"%Y" 2>/dev/null` (3认同)

abu*_*bua 7

在 Stack Overflow 上,anubhava提供了一个优雅的解决方案:

#!/bin/bash
(( !($1 % 4) && ( $1 % 100 || !( $1 % 400) ) )) &&
echo "leap year" || echo "not a leap"
exit 0
Run Code Online (Sandbox Code Playgroud)

将上述内容保存在名为isleap.

不要忘记设置执行权限:

chmod +x isleap
Run Code Online (Sandbox Code Playgroud)

测试一下:

$ ./isleap 1900
not a leap
$ ./isleap 2000
leap year
Run Code Online (Sandbox Code Playgroud)