Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Unix中找到当前日期减去七天?_Unix_Sh_Ksh - Fatal编程技术网

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

如何在Unix中找到当前日期减去七天?,unix,sh,ksh,Unix,Sh,Ksh,我想找出今天七天前的日期 CURRENT_DT=`date +"%F %T"` diff=$CURRENT_DT-7 echo $diff 我正在尝试上面的方法,以找到比当前日期少7天的时间。有人能帮我一下吗?我有一段时间没有使用unix了,但我在我的一个脚本中发现了这一点 echo `date +%s`-604800 | bc GNUdate将为您提供数学: date --date "7 days ago" 另一个版本将要求您将当前日期转换为从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一起使用:


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

Ksh
printf
可以进行时间计算:

$ 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

上午604800000的成绩是什么样的823540175@jcrshankar哦,哎呀,多了几个零,应该是604800Tag,上面写着“Unix”,但这个例子不适用于Solaris 10。通常,Unix不允许以这种方式使用
date
命令。当然,Perl可以做到这一点。@ThomasDickey啊,好的。我对Unixpday=7 CURRENT=
date+%F%t”--date“$pday days ago”
echo$CURRENT这很好。shell处理将
$pday
替换为7的问题,因此
date
无论采用哪种方式都会获得与
--date
相同的参数。同样,GNU date不太可能安装在Unix系统上(可能只有Linux和Cygwin之类的结构)。很有趣(我发现这是一个相对较新的功能——在*上的手册中,但在旧版本中没有看到。对Debian系统的快速检查显示它是ksh93的一部分(OP没有提供详细信息)。请添加一些详细信息,并详细说明解决方案的工作原理。
date -v-7d +%Y-%m-%d
> 2018-04-03
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