Linux 如何获取日期字段并对其进行操作

Linux 如何获取日期字段并对其进行操作,linux,bash,Linux,Bash,我试图找出如何减少日期的天数,比如说我设置了当前日期 set $date 我怎样才能从中减去天数,并得到该期间的日期 例如,2012年7月27日Detracing 5变为2012年7月22日首先将其转换为秒,减去五天内的秒数,然后再转换回: date --date=@$(($(date --date='27 Jul 2012' +'%s') - $((5 * 24 * 3600)) )) +%x 首先将其转换为秒,减去五天内的秒数,然后再转换回: date --date=@$(($(date

我试图找出如何减少日期的天数,比如说我设置了当前日期

set $date
我怎样才能从中减去天数,并得到该期间的日期


例如,
2012年7月27日
Detracing 5变为
2012年7月22日
首先将其转换为秒,减去五天内的秒数,然后再转换回:

date --date=@$(($(date --date='27 Jul 2012' +'%s') - $((5 * 24 * 3600)) )) +%x

首先将其转换为秒,减去五天内的秒数,然后再转换回:

date --date=@$(($(date --date='27 Jul 2012' +'%s') - $((5 * 24 * 3600)) )) +%x

您可以使用date实用程序以秒为单位转换日期。见


您还可以从当前日期执行几种不同的加减法。看看这里:

您可以使用date实用程序以秒为单位转换日期。见


您还可以从当前日期执行几种不同的加减法。看看那里:

您可以使用
日期
计算差异,例如:

date -d "27jul2012 - 5 days" +%d%b%Y

您可以使用
date
计算差异,例如:

date -d "27jul2012 - 5 days" +%d%b%Y

略短的版本:

date --date="@$(expr $(date +%s) - 432000)"

其中432000是5天内的秒数。

稍短的版本:

date --date="@$(expr $(date +%s) - 432000)"

其中432000是5天内的秒数。

它当然有效,但需要外部计算才能知道5天内的秒数,还需要额外的计算过程<当解析
-d
选项的参数时,code>date已经处理了这两个问题。事实上,我不知道
date
可以做到这一点。有趣!夏令时意味着并非每天都有86400秒,这当然是可行的,但它需要一个外部计算来知道5天内有多少秒,并需要一个额外的过程来计算<当解析
-d
选项的参数时,code>date已经处理了这两个问题。事实上,我不知道
date
可以做到这一点。有趣!夏令时意味着并非每天都有86400秒的建议,而且有可能要求将其指定给变量?我正在尝试使用:passato=date-d“2012年7月27日-90天”+%Y%m%d,但是我没有得到存储在变量中的值。您需要分配执行结果,而不是命令本身——将命令包含在backticks或
$()
中。您好,thx获得建议,是否可以将其指定给变量?我正在尝试使用:passato=date-d“2012年7月27日-90天”+%Y%m%d,但我没有得到存储在变量中的值。您需要分配执行结果,而不是命令本身——将命令包含在backticks或
$()
中。对于GNU date来说,这不太有用,因为它可以在本机上执行这类操作,但是对于其他的
date
s,一个很好的方法是不能,例如对于FreeBSD:
date-j-f'%s'$($(date-j-f'%d%h%Y''2012年7月27日+%s')-$(5*24*3600))+%x
@Sorpigal:yes。我刚刚对Larses的回答投了更高的票,提醒我:)这对GNU date不是很有用,因为GNU date本来就可以做这类事情,但对其他
日期
date
date
date-j-f'%s'$($(date-j-f'%d%h%Y''%2012年7月27日+%s')-$(5*24*3600))+%x
@Sorpigal:Yep。我只是对拉尔斯提醒我的答案投了赞成票:)