【问题标题】:getting a previous date in bash/unix在 bash/unix 中获取上一个日期
【发布时间】:2013-04-08 07:27:45
【问题描述】:

我希望在 unix / shell 脚本中获取上一个日期。

我正在使用以下代码

date -d ’1 day ago’ +’%Y/%m/%d’

但我收到以下错误。

date: illegal option -- d

据我在 inetrnet 上阅读的内容,这基本上意味着我使用的是旧版本的 GNU。任何人都可以请帮忙。

更多信息

unix> uname -a

SunOS Server 5.10 Generic_147440-19 sun4v sparc SUNW,Sun-Fire-T200

下面的命令也会出错。

unix> date --version

date: illegal option -- version
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]

【问题讨论】:

  • 如果您使用的是真正的 unix,许多人不支持 date -d 选项。考虑编辑您的问题以包含uname -a 和date --version 的输出。祝你好运。
  • 不是 Unix,SunOS 5.10 Generic_147440-19 sun4v sparc SUNW,Sun-Fire-T200System = SunOS
  • +1 到 shellter,另一种选择是 date -h 和/或 man date 以查看您的系统是否支持 -d 选项。
  • 您可以检查您是否安装了gdate(GNU 日期)。
  • @FatalError 对不起,我是 shell 脚本的菜鸟。我该如何检查?如果我直接在 unix 上运行这个 coomand,我会得到 ksh: gdate: not found

标签: bash shell unix solaris solaris-10


【解决方案1】:

试试这个:

date --date="yesterday" +%Y/%m/%d

【讨论】:

  • 我在我的 shell 脚本中使用它并且在我所有的 shell 中都可以正常工作。你测试了吗??
  • 那么问题的代码也对你有用,而且你不在 SunOS 上。
  • 是的,这也有效。我没有使用 SunOS,这就是我要求尝试的原因。
  • 这在 Solaris 11.3 中对我有用,但使用“gdate”而不是“date”。
  • 搜索引擎在这里向我们发送询问如何在 linux 中查找昨天的日期。 @tripleee 请在​​您的问题中指定“SunOS”,因为您的用例不适用于通用 bash/linux,这似乎可以正常工作。
【解决方案2】:
dtd="2015-06-19"
yesterday=$( date -d "${dtd} -1 days" +'%Y_%m_%d' )
echo $yesterday;

【讨论】:

    【解决方案3】:

    你可以使用

    date -d "30 days ago" +"%d/%m/%Y"
    

    要获取 30 天前的日期,同样您可以将 30 替换为 x 天数

    【讨论】:

      【解决方案4】:

      为了使用日期命令获得 1 天的回溯日期:

      date -v -1d 它会给出 (current date -1) 表示 1 天前。

      date -v +1d 这将给出 (current date +1) 表示 1 天后。

      类似下面的代码可以用来代替d来找出年月等

      y-Year, m-Month w-Week d-Day H-Hour M-Minute
      S-Second

      【讨论】:

        【解决方案5】:

        这里建议的几个解决方案假设GNU coreutils 存在于系统上。以下应该适用于 Solaris:

        TZ=GMT+24 date +’%Y/%m/%d’
        

        【讨论】:

        • 出色的答案。完美运行。我唯一的查询是,这是否特定于任何时区?我住在 GMT+10 时区,这是否意味着我应该相应地更新查询?
        • 如果您的时区是 GMT+10,请使用TZ=GMT+14 date +’%Y/%m/%d’。
        • ... 这再次使这个答案不适合便携式解决方案;但如果它对你有用,可以说是最简单的。
        • @devnull 谢谢。只是想明白逻辑,如果是 GMT+10 ,为什么我在等式中使用 GMT+14 ?
        • 另一种选择是说:TZ=$TZ+24 date +’%Y/%m/%d’
        【解决方案6】:

        以下脚本将上一个日期打印到targetDate(指定日期或给定日期)

        targetDate=2014-06-30
        count=1
        startDate=$( echo `date -d "${targetDate} -${count} days" +"%Y-%m-%d"`)
        echo $startDate
        

        【讨论】:

          【解决方案7】:

          SunOS 附带传统的 BSD 用户空间工具,这些工具通常缺乏预期的现代选项。看看你是否可以获得 XPG 插件(类似于 /usr/xpg4/bin/date)或安装 GNU coreutils 包(如果可以)。

          与此同时,您可能需要编写自己的简单日期处理脚本。网上有很多例子,例如在 Perl 中。例如。 this one:

          vnix$ perl -MPOSIX=strftime -le 'print strftime("%Y%m", localtime(time-86400))'
          201304
          

          (稍微改编一下,如果你与链接后面的那个相比的话。)

          【讨论】:

            【解决方案8】:

            我已使用以下解决方法来获得所需的解决方案。

            timeA=$(date +%Y%m)
            sysD=$(date +%d)
            print "Initial sysD $sysD">>LogPrint.log
            sysD=$((sysD-1))
            print "Final sysD $sysD">>LogPrint.log
            finalTime=$timeA$sysD
            

            我希望这对和我面临同样问题的人有用。

            【讨论】:

            • 当然,1月份,201401减一是201400,不是201312。
            • @tripleee 同意这不是一个万无一失的解决方法。但目前我无法找到任何其他解决方案:(。我仍在寻找更好的答案。
            【解决方案9】:
            $ date '+%m/%d/%Y' --- current date
            
            
            $ TZ=Etc/GMT+24 date  '+%m/%d/%Y'  -- one dayprevious date
            

            适当使用时区

            【讨论】:

              【解决方案10】:

              试试这个: gdate -d "1 天前" +"%Y/%m/%d"

              【讨论】:

                【解决方案11】:
                date -d "yesterday" '+%Y-%m-%d'
                

                【讨论】:

                • 请添加解释来解释这是做什么的。
                • 它给出了前一天的日期。
                【解决方案12】:

                问题

                您的论点使用的是反引号,而不是单引号。您也可能没有使用 GNU date,或支持您正在使用的标志的 date 版本。

                解决方案

                正确引用你的论点。例如:

                $ date -d '1 day ago' +'%Y/%m/%d'
                2013/04/14
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-07-06
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-12-01
                  相关资源
                  最近更新 更多