在非 GNU 系统上计算 1125 天前的日期?

Ste*_*ski 6 osx freebsd date non-gnu

在 Unix Bash 命令行上,我想使用基本操作系统(例如 No Perl 或 Python)计算 1125 天前的日期。

在运行GNU Date 的系统上,我可以执行以下操作:

ubuntu $ date --date="1125 days ago"
Wed Nov  7 15:12:33 PST 2007
Run Code Online (Sandbox Code Playgroud)

FreeBSD 或 MacOSX 系统不附带 GNU Date,也不支持像“X 天前”这样的值。

freebsd81 $ date --date="+1125 days ago"
date: illegal option -- -
Run Code Online (Sandbox Code Playgroud)

可以在 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
Run Code Online (Sandbox Code Playgroud)

我可以在非 GNU 系统上计算旧日期而无需深入研究 Perl 或 Python 之类的工具吗?或者我必须使用更强大的脚本语言?

gab*_*be. 7

好吧,你可以做一些偷偷摸摸的事情,比如:

$ 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

* 引用自http://www.sun.com/bigadmin/shellme/

此外,Solaris 上用于从 date 命令**获取当前时间戳的替代方法是:

/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time()/ {gsub(//,"",$2);print $2}'

** 引用自http://www.commandlinefu.com/commands/view/7647/unix-timestamp-solaris