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

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

我需要创建本质上是带有前缀yp_和后缀的日期戳.log以及经过操纵的日期数字的日志文件:

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

对于今天来说这还好,但是当日期数字介于 01 和 10 之间时,一切都会变得很糟糕。结果不能再被解释为日期戳。

例如,假设日期是 2016 年 3 月 8 日,即“20160308”。我该如何编写上述代码,以确保减去 10 天会产生不是'20150298' 但 '20150227' ?还用 19820103 测试你的答案......

- 我在看man date

——apropos date喷出了 161 条我也审查过的结果。

有人能帮忙解释一下这句话吗?

答案1

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

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

-d, --date=STRING
          display time described by STRING, not 'now'

(从man date

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

touch yp_$(date -d 'now - 10 days' +%Y%m%d).log

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

答案2

要显示今天之后 x 天的格式化日期:

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

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

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

相关内容