Shell
UNIX 中用於減去日期的工具
Solaris UNIX 中是否有任何工具(因此沒有可用的 GNU 工具)來減去日期?我知道在 Linux 中我們
gawk
可以從另一個日期中減去一個日期。但是在 Solaris 中,我們擁有的最大值是nawk
(改進的awk
),它不能執行日期計算。我也不能使用perl。有什麼方法可以進行日期計算
20100909 - 20001010
嗎?更新:
bc
能夠執行日期計算嗎?
不幸的是,沒有一個 POSIX 命令行實用程序提供日期算術。
date -d
如果你有它們,date +%s
它們就是你要走的路,但它們是 GNU 擴展。有一種笨拙的技巧
touch
可以檢查日期是否至少在過去 n 天:touch -t 201009090000 stamp if [ -n "$(find stamp -mtime +42)" ]; then ...
(請注意,如果 DST 在間隔內開始或停止並且腳本在凌晨 1 點之前執行,則此程式碼可能會關閉。)
有幾個人最終在 Bourne 或 POSIX shell 中實現了日期操作庫。comp.unix.shell FAQ中有一些範例和連結。
安裝 GNU 工具可能是最不痛苦的方式。
我會嘗試使用作為
date
POSIX 一部分的命令,所以它幾乎無處不在。更新:不幸的是,似乎 -d 不是 POSIX 日期的一部分,並且在 Solaris 上可能不存在。因此,這可能不會回答 OP 的問題。d1=`date -d 20100909 +%s` d2=`date -d 20001010 +%s`
現在
d1
和d2
是對應於自 unix 紀元以來的秒數的整數。因此,為了得到兩者之間的差異,我們減去($((d1-d2))
在 bash 中)並轉換為我們想要的任何單位。日子是最簡單的:echo "$(((d1-d2)/86400)) days"
如果您沒有 bash,如何進行轉換可能會有所不同。最便攜的方式可能是使用
expr
(expr 的 posix 手冊頁)。