如何在 Unix 中找到当前日期减去 7 天?

How can I find the current date minus seven days in Unix?

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

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

我正在尝试类似上面的方法来查找比当前日期少 7 天的时间。谁能帮帮我吗?

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

echo `date +%s`-604800 | bc

GNU date 将为您计算:

date --date "7 days ago"

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

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

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

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

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

Kshprintf可以做时间计算:

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

为 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
DATE=$(date --date "7 days ago" | awk '{print,,}')
echo "$DATE"
if [ -z "$(grep -i "$DATE" test.log)" ]; then
  exit 1
fi
sed -i "1,/$DATE/d" test.log