一年中剩余的天数

时间:2019-02-27 22:40:58

标签: bash macos shell

这杀死了我的vs代码中的短毛猫。 有没有一种单线可以更好地执行此操作?

echo -n "$((($(date -j -f "%Y%m%d" "$(( $(date +"%Y0101")+10000 ))" "+%s") - $(date "+%s"))/(60*60*24)))";
echo " days until $(( $(date +"%Y")+1 ))"

打印:

308 days until 2020

2 个答案:

答案 0 :(得分:0)

我会使用python:

python -c 'from datetime import datetime as dt;y=dt.now().year+1;print('{} days until {}'.format((dt(y,1,1)-dt.now()).days,y))'

是以下内容的单行版本:

from datetime import datetime as dt

next_year = dt.now().year + 1;
days = (dt(next_year, 1, 1) - dt.now()).days

print('{} days until {}'.format(days, next_year))

输出(使用UTC时区):

306 days until 2020

答案 1 :(得分:0)

Pure Bash一线(在Linux上测试,此处没有Mac)

eoy=$([ -n "$(date -d 'Feb 29' '+%-j' 2>/dev/null)" ] && echo 366); echo "$((${eoy:-365} - $(date '+%-j'))) days until $(($(date -d 'Dec 31' '+%Y') +1))"

结果:

307 days until 2020

测试a年:

eoy=$([ -z "$(date -d 'Feb 29 2020' '+%-j' 2>/dev/null)" ] && echo 366); echo "$((${eoy:-365} - $(date '+%-j'))) days until $(($(date -d 'Dec 31 2020' '+%Y') +1))"

结果:

308 days until 2021

两行相同:

# year days if leap year
eoy=$([ -z "$(date -d 'Feb 29' '+%-j' 2>/dev/null)" ] && echo 366)
# ${eoy:-365} -> if $eoy is not set or empty string use default 365
echo "$((${eoy:-365} - $(date '+%-j'))) days until $(($(date -d 'Dec 31' '+%Y') +1))"