Bash:今天和非常远的未来日期之间的天数

时间:2016-02-25 15:47:37

标签: bash

我正在尝试查找今天和未来(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

3 个答案:

答案 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来完成此操作。