Freebsd
在非 GNU 系統上計算 1125 天前的日期?
在 Unix Bash 命令行上,我想使用基本作業系統(例如 No Perl 或 Python)計算 1125 天前的日期。
在執行GNU Date的系統上,我可以這樣做:
ubuntu $ date --date="1125 days ago" Wed Nov 7 15:12:33 PST 2007
FreeBSD 或 MacOSX 系統不附帶 GNU Date,也不支持像“X days ago”這樣的值。
freebsd81 $ date --date="+1125 days ago" date: illegal option -- -
我可以在 Mac 或 FreeBSD 系統上計算幾天前的日期,但這僅限於幾天:
# Today is really Dec 6, 2010. 4 days ago it was: macosx $ TZ=GMT+96 date +%Y%m%d 20101202 # But that doesn't work if I want to see the date 8 days ago: macosx $ TZ=GMT+192 date +%Y%m%d 20101206
我可以在非 GNU 系統上計算舊日期而不深入研究 Perl 或 Python 等工具嗎?還是我必須使用更強大的腳本語言?
好吧,你可以做一些鬼鬼祟祟的事情,比如:
$ echo "`date +%s` - (1125 * 24 * 60 *60)" |bc 1194478815 $日期-r 1194478689 2007 年 11 月 7 日,星期三 18:38:09 -0500
在 OpenBSD 上測試過(絕對不是基於 gnu 的日期),並且似乎可以工作。
分步驟分解:
- 獲取目前的 unixtime(自 unix 紀元開始的秒數):
$ 日期 +%s 1291679934
- 獲取 1125 天的秒數
$ echo "1125 * 24 * 60 *60" | 公元前 97200000
- 減一 (1291679934 - 97200000) = 1194478815
- 使用新的 unixtime (1194478815) 列印一個漂亮的日期
$日期-r 1194478689 2007 年 11 月 7 日,星期三 18:38:09 -0500
- 作為替代方案,在 solaris 上,您可以這樣做來列印日期*:
/bin/echo "0t1194478815>Y\n<Y=Y" |adb
此外,在 Solaris 上從 date 命令獲取目前時間戳的另一種方法**是:
/usr/bin/truss /usr/bin/日期 2>&1 | nawk -F= '/^time()/ {gsub(/ /,"",$2);print $2}'
** 引用自http://www.commandlinefu.com/commands/view/7647/unix-timestamp-solaris