Freebsd

在非 GNU 系統上計算 1125 天前的日期?

  • January 23, 2019

在 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

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