【问题标题】:How can I find the current date minus seven days in Unix?如何在 Unix 中找到当前日期减去 7 天?
【发布时间】:2015-06-11 02:44:37
【问题描述】:

我正在尝试查找今天前 7 天的日期。

 CURRENT_DT=`date +"%F %T"`
 diff=$CURRENT_DT-7 
 echo $diff 

我正在尝试使用上述方法来查找比当前日期少 7 天的时间。谁能帮帮我?

【问题讨论】:

    标签: unix sh ksh


    【解决方案1】:

    GNU date 将为您计算:

    date --date "7 days ago"
    

    其他版本将要求您首先将当前日期转换为自 UNIX 纪元以来的秒数,手动减去 7 天的秒数,然后将其转换回所需的形式。请参阅您的 date 版本的文档,了解有关如何与 Unix 时间戳相互转换的详细信息。这是再次使用 GNU date 的示例:

    x=$(date +%s)
    x=$((x - 7 * 24 * 60 * 60))
    date --date @$x
    

    【讨论】:

    • pday=7 CURRENT=date +"%F %T" --date "$pday days ago" echo $CURRENT 怎么样
    • 没关系。 shell 处理将$pday 替换为7,因此date 得到与--date 相同的参数。
    • 同样,GNU date 不太可能安装在 Unix 系统上(可能只有 Linux 和 Cygwin 等结构)。
    【解决方案2】:

    这是一个简单的 Perl 脚本,它(与其他示例不同)适用于 Unix

    perl -e 'use POSIX qw(ctime); printf "%s", ctime(time - (7 * 24 * 60 * 60));'
    

    (使用 Solaris 10 和令牌 Linux 系统进行测试,当然 - 需要注意的是 Perl 不是必要配置的一部分,只是很有可能)。

    【讨论】:

      【解决方案3】:

      Kshprintf可以做时间计算:

      $ printf '%(%Y-%m-%d)T\n'
      2015-04-07
      $ printf '%(%Y-%m-%d)T\n' '7 days ago'
      2015-03-31
      $
      

      【讨论】:

      • 有趣(我认为这是一个相对较新的功能——在 *ksh 手册中 *AST UNIX MANUAL,但在旧版本中没有,如 *nixDoc 所示。快速检查 Debian系统将其显示为 ksh93 的一部分(OP 未提供详细信息)。
      【解决方案4】:

      为 OSX 上的 shell 添加这个:

      date -v-7d
      > Tue Apr  3 15:16:31 EDT 2018
      date
      > Tue Apr 10 15:16:33 EDT 2018
      

      需要格式化吗?

      date -v-7d +%Y-%m-%d
      > 2018-04-03
      

      【讨论】:

        【解决方案5】:

        我有一段时间没有使用 unix,但我在我的一个脚本中发现了这个

        echo `date +%s`-604800 | bc
        

        【讨论】:

        • 这是什么 604800000 am 得到像 823540175 这样的结果
        • @jcrshankar 哎呀,多了几个零,应该是 604800
        • 标签显示“Unix”,但此示例不适用于 Solaris 10。通常,Unix 不允许以这种方式使用 date 命令.当然,Perl 可以做到这一点。
        • @ThomasDickey 啊,好的。我不怎么做 Unix
        【解决方案6】:
        DATE=$(date --date "7 days ago" | awk '{print$1,$2,$3}')
        echo "$DATE"
        if [ -z "$(grep -i "$DATE" test.log)" ]; then
          exit 1
        fi
        sed -i "1,/$DATE/d" test.log
        

        【讨论】:

        • 请添加一些细节并详细说明您的解决方案为何有效。
        猜你喜欢
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        • 2021-11-09
        • 2013-01-03
        • 1970-01-01
        相关资源
        最近更新 更多