使用日期格式 %Y%m%d 一致地操作日期戳字符串

Cbh*_*ihe 5 date bash-scripting

我需要创建日志文件,这些文件本质上是带有 prefixyp_和 suffix 的日期戳.log,以及一个被操纵的日期:

$ touch yp_$(echo "$(date +%Y%m%d)-10" | /usr/bin/bc -l).log
$ ls
yp_20150912.log   # ... ok for today's date.
Run Code Online (Sandbox Code Playgroud)

这对今天来说很好,但是当一天的数字在 01 到 10 之间时,一切都会变得混乱。结果不能再解释为日期戳。

例如,假设这一天是 2016 年 3 月 8 日,即“20160308”。如何上面代码中,以确保减去10天会产生“20150298”,但“20150227”?还用 19820103 测试你的答案......

——我看着man date

-apropos date喷出 161 个点击我也审查过。

有人可以帮忙解决那个单线吗?

Ste*_*ven 6

要显示从今天起 x 天的格式化日期:

$ echo $(date +%Y%m%d)
20150922

$ echo $(date -d -10days +%Y%m%d)
20150912

$ echo $(date -d +10days +%Y%m%d)
20151002
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢你的答案的简洁,答案是正确的。但它只是在 @bertieb 自己的之后出现,这同样正确。所以我只能给你点赞。Tx Steven 并为此感到抱歉。 (2认同)

ber*_*ieb 6

我需要操纵日期(同时注意闰年)

幸运的是,GNU date有一个非常方便的 -d选项:

-d, --date=STRING
          display time described by STRING, not 'now'
Run Code Online (Sandbox Code Playgroud)

(来自man date)

这接受任意日期描述,例如“现在 + 1 年”“1 月 28 日 + 3 周”;或者在您的情况下:“现在 - 10 天”:

touch yp_$(date -d 'now - 10 days' +%Y%m%d).log
Run Code Online (Sandbox Code Playgroud)

不需要对 的乱七八糟的调用bc,也不需要担心闰年——GNUdate会处理它。