對於我們的每日構建系統,我寫了一個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