linux +添加X天日期并获取新的虚拟日期


115

我有Linux(RH 5.3)机器

我需要添加/计算10天加上日期,以便获得新的日期(失效日期)

例如

 # date 
 Sun Sep 11 07:59:16 IST 2012

所以我需要

     NEW_expration_DATE = Sun Sep 21 07:59:16 IST 2012

请建议如何计算新的到期日期(使用bash,ksh或操纵日期命令?)

Answers:


157

您只需使用-d开关并提供要计算的日期

date
Sun Sep 23 08:19:56 BST 2012
NEW_expration_DATE=$(date -d "+10 days")
echo $NEW_expration_DATE
Wed Oct 3 08:12:33 BST 2012 
  -d, --date=STRING
          display time described by STRING, not now

这是一个非常强大的工具,您可以执行以下操作

date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 03:29:16 BST 2012

要么

TZ=IST date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 07:59:16 IST 2012

要么

prog_end_date=`date '+%C%y%m%d' -d "$end_date+10 days"`

因此,如果$ end_date = 20131001,则$ prog_end_date = 20131011


2
谢谢!!您的示例应该在GNU date信息页面中!
Davor Cubranic

不知道我能做到这一点-这是一个非常好的解决方案。
蒂姆·

1
+1:很棒。有用的答案。
copper.hat

1
在OS X上使用内置日期时,您将收到错误消息。使用brew install coreutils安装GNU的日期功能,gdate
CousinCocaine

2
不起作用: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Christian Bongiorno

38

您可以使用“ + x天”作为格式字符串:

$ date -d "+10 days"

20
$ date -v -1d

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

$ date -v -1d

它将给(当前日期-1)表示1天前。

$ date -v +1d

这将使(当前日期+1)表示1天后。

类似地,下面的书面代码可以代替“ d”来找出年,月等。

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

8
这适用于我的Mac,但不适用于我们的Gentoo服务器。
Mike Dotterer,2015年

比接受的答案好得多,这也允许在一行中使用任意日期格式。
pferrel

9
这在Ubuntu 15.10或RedHat 6.6上不起作用。我认为它在RH5.3上也不起作用。原因:“-v”和“ -1d”不是“日期”的有效开关
syss

2
这似乎是的Unix / BSD语法date,GNU dategdate在许多BSD上)不支持该语法。GNU date使用公认的答案中的语法。永远记住:GNU不是Unix!
培根片

1
@BaconBits-但是,如果您是rms,则可以声明,因为许多GNU util代码已移植到Linux,因此“ Linux GNU”。当然,除了GNU Hurd(FSF的“曾经与未来” OS)仅仅是一个事实。我想生气的是,尽管他花了很多时间在思索上,莱纳斯却花了很多时间在写代码上-事实证明,如果您编写代码而不是通过书本化,那么您更有可能创建有效的软件。:-)
鲍勃·贾维斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.