36

我意识到我可以编写一个小的 C 或 Ruby 程序来执行此操作,但我希望我的脚本具有尽可能少的依赖项。

鉴于此警告,如何在 OS X 上的 bash 脚本中进行日期数学运算?我看过一个帖子(在另一个网站上),有人做了以下事情:

日期 -d "-1 天"

但这似乎不适用于 OS X。

附录:

有几个人评论并回应说 Ruby、Python、Perl 等是 OS X 的标准配置。我熟悉这三种语言,并且可以轻松编写执行我想要的脚本。事实上,我已经有了这样一个用 Ruby 编写的脚本。

所以也许我应该澄清我所说的“外部依赖”是什么意思。我的意思是,我不希望我的 bash 脚本必须调用它外部的任何其他脚本。换句话说,我希望它使用一些在 OS X 的 vanilla 安装中可用并且已经在路径上的实用程序。

但是,这看起来不太可能,所以我将不得不使用我的外部依赖项:一个 Ruby 脚本。

4

8 回答 8

49
$ date -v -1d

-d 设置夏令时标志。

尝试 man date 以获取更多信息。

于 2009-01-31T06:20:03.543 回答
27

例如,此 OS X 日期命令将在输入字符串 20160826(不是当前时间)中添加 14 天:

date -j -f %Y%m%d -v+14d 20160826 +%Y%m%d
于 2015-09-19T15:06:31.540 回答
20

因为MacOS是基于BSD,而不是linux,所以命令其实是:

date -v-1d

调整开关采用格式-v[+/-](number)[ymwdHMS]

于 2011-04-08T17:37:28.830 回答
1

Matthew 提到的命令适用于 Leopard 上的 /bin/date。此外,正如 Schwern 所指出的,如果您确定您的 shell 脚本将在 Mac OS X 上运行,您为什么不想使用 Python 或 Ruby,它们都是 /usr/bin 中的标准配置?这绝不会影响您特定场景中的可移植性。

于 2009-01-31T14:05:25.570 回答
0

我意识到我可以编写一个小的 C 或 Ruby 程序来执行此操作,但我希望我的脚本具有尽可能少的依赖项。

用 C 或 Ruby 脚本执行会导致更少的依赖性,并且更跨平台。. Bash 脚本只调用各种其他脚本/应用程序,主要是 GNU 实用程序。. 许多命令不可用,或者采用不同的参数在其他平台上(尤其是在 OS X 和 Linux 之间)..

Ruby 默认包含在 OS X Leopard(和 10.4,如果我没记错的话可能是以前的版本)中,如果您使用 Rubys 内置日期库,它将在任何平台上始终如一地工作。

每当您尝试做任何远程复杂的事情时,通常最好使用“适当的”脚本语言!

于 2009-01-31T15:02:04.677 回答
0

这是我用来在 google doc 中打印日记日期的脚本:

    #!/bin/bash

    # ask user for variable details
    read -p 'Starting date in "mm-dd-yyyy" format: ' DATE

    # adjust the count by editing the "x" number in {0..x}
    # 91 days will give you about 3 months, currently set to 6 for testing
    # %a gives short day of the week, -m -d gives single digit months and days, capital Y gives 4 digit year

    for i in {0..6}
    do
         NEXT_DATE=$(date -j -f %m-%d-%Y -v+"$i"d $DATE +'%a %-m/%-d/%y')
         echo -e "$NEXT_DATE\n\n\n"
    done

这是示例输出,(我在每个日期之间使用 3 个新行):

2018 年 4 月 1 日星期日

2018 年 4 月 2 日星期一

2018 年 4 月 3 日星期二

2018 年 4 月 4 日星期三

2018 年 4 月 5 日星期四

2018 年 4 月 6 日星期五

2018 年 4 月 7 日星期六

于 2018-04-03T18:23:21.333 回答
0

你可能正在寻找这个。gdate '+%s' -d '2 weeks ago'或者gdate '+%s' -d '1 day ago'

这两个示例在 Epoch 时间返回。我把那几秒钟变成了我的语言可以正常阅读的东西strptime(seconds, '%s')。Python Ruby 和 Javascript 是我所知道的少数拥有它的。我相信 Java 和所有其他人也会这样做。

也是gdate日期(GNU coreutils)它只是在mac上调用了一些不同的东西。奇怪的是在我的另一台 Mac 上,它让我使用它data来获得同样的效果。不知道为什么他们最近会改变一些东西。

于 2018-12-12T21:06:55.383 回答
0

我在 macOS Mojave 10.14.5 上使用了以下内容,以找到 DHCP 续订时间打开

date -v +`ipconfig getoption en0 renewal_t1_time_value`S
于 2019-06-20T14:41:34.510 回答