对于我们的每日构建系统,我写了一个C程序,它的计算(使用本地专有将日期存储为自参考日期以来的天数的库)。基本上,给定一个(不变的)参考日期,它报告自参考日期以来的天数。因此,cron
脚本在第一天就会有硬连线,并且程序会报告此后的天数。
该系统的一大优点是,参考日期不会改变(很多时候),所以脚本不会改变(经常),且没有外部文件来存储信息。
可能有许多方法可以用标准Unix工具实现相同的效果,但我没有坐下来研究便携式解决方案。我可能会认为它使用Perl的条款。 (C程序只能工作到2999 CE;我在代码中留下了一个笔记,让人们在大约50年前联系我,然后才成为Y3K修复的问题,这可能是微不足道的。)
你可以在Unix的时间戳而言或许工作...
创建一个脚本“days_since 1234567890”它把数为基准日期,获取当前时间戳(从date
适当的格式规范;在Linux上,date '+%s'
可以完成这项工作,它也可以在Mac OS X上运行),将差异除以86,400(一天中的秒数)。
refdate=1234567890
bc <<EOF
scale=0
($(date '+%s') - $refdate)/86400
EOF
一个例子:
$ timestamp 1234567890
1234567890 = Fri Feb 13 15:31:30 2009
$ timestamp
1330027280 = Thu Feb 23 12:01:20 2012
$ refdate=1234567890
$ bc <<EOF
> scale=0
> ($(date '+%s') - $refdate)/86400
> EOF
1104
$
所以,如果基准日为13日2009年2月,今天是1104天(该方案bc
是计算器,它的名字已经无关公元或在基督之前程序timestamp
是我的另一种自制软件,它根据可指定的格式打印时间戳;它是date
的一个特殊变体,最早在date
之前有写作功能,我的意思是在20世纪80年代初期)
在一个Perl的一行(假设你指定你的脚本参考日期):
perl -e 'printf "%d\n", int((time - 1234567890)/ 86400)'
或:
days=$(perl -e 'printf "%d\n", int((time - 1234567890)/ 86400)')
此外,这是相当粗糙 - 这不会增加例如,如果计算机处于关闭状态,则为DayCounter的值。 您可以输出系统时间的当前值,并在脚本中将DayCounter增加自上次消息以来经过的天数。那样,如果cronjob不是因为任何原因运行的,你的柜台不会落后一天。 – Wheels2050 2012-02-23 19:52:19
在bash中,您应该使用$(
jordanm
2012-02-23 19:53:54
谢谢jordanm,我之前没有遇到过。我编辑了我的答案。 – Wheels2050 2012-02-23 19:54:59