我正在尝试查找今天和未来(02/25/2362)之间的天数。日期格式为mm / dd / yyyy。
#!/bin/sh
now=$(date +%m/%d/%Y)
purge_date="02/25/2362"
#echo "$now"
#echo "$purge_date"
date1_unix=`date -d $now +%s`
date2_unix=`date -d $purge_date +%s`
#echo "$date1_unix"
#echo "$date2_unix"
diff=`expr $date2_unix - $date1_unix`
diff_days=`expr $diff / 86400` # Number of seconds in a day are 86400
echo $diff_days
这种方法适用于未来日期接近但如图所示的2362年,我收到错误:
date: invalid date `02/25/2362'
expr: syntax error
expr: syntax error
答案 0 :(得分:0)
如果您只对天数感兴趣
$(( ($(date --date="30001020" +%s) - $(date --date="19701020" +%s) )/(60*60*24) ))
这将给出日期3000-Oct-20和1970-Oct-20之间的差异 我认为日期转换%s 不是必要的,但这是我测试过的。
答案 1 :(得分:0)
您必须计算两个日期的Julian day number。它解释了here,如何做到这一点。之后,您可以减去这两个值。
答案 2 :(得分:0)
根据评论中添加的信息,您似乎使用的date
版本无法处理此类较远的日期。通过检查date -d 02/25/2362
的错误输出,我们看到了
date: invalid date 02/25/2362
有可能升级date
可执行文件,但可能是32位Linux的(现有)日期实现没有足够的范围,让您更改操作系统或编写必要的代码现有的date
。
有关信息,我可以确认使用(64位Linux x86-64 ELF,date (GNU coreutils) 8.21
)的日期实施情况可以很好地应对当前任何一方二十亿年的日期。 / p>
顺便说一句,如果date
命令失败,可能值得安排你的脚本提前退出,而不是允许它在计算的其余部分传播不良输入。执行此操作的简单方法是将-e
选项传递给shell(假设类似Bourne的shell,例如Bash或Dash)。您可以将其添加到#!
行,或在程序开头编写set -e
来完成此操作。