Shell

UNIX 中用於減去日期的工具

  • June 29, 2020

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 工具可能是最不痛苦的方式。

我會嘗試使用作為datePOSIX 一部分的命令,所以它幾乎無處不在。更新:不幸的是,似乎 -d 不是 POSIX 日期的一部分,並且在 Solaris 上可能不存在。因此,這可能不會回答 OP 的問題。

d1=`date -d 20100909 +%s`
d2=`date -d 20001010 +%s`

現在d1d2是對應於自 unix 紀元以來的秒數的整數。因此,為了得到兩者之間的差異,我們減去($((d1-d2))在 bash 中)並轉換為我們想要的任何單位。日子是最簡單的:

echo "$(((d1-d2)/86400)) days"

如果您沒有 bash,如何進行轉換可能會有所不同。最便攜的方式可能是使用exprexpr 的 posix 手冊頁)。

引用自:https://unix.stackexchange.com/questions/1825