bash日期无效日期(-d' feb 29 - 3年')

时间:2015-09-17 14:18:43

标签: bash date

我今天正在使用date命令并发现了一些我无法解释的行为(我浏览过:〜$ info'(coreutils)日期调用'但没有找到任何内容)并希望这里有人可以帮我理解为什么会这样。

~$ date -u +%F -d "feb 28 -3years"
>> 2012-02-28
~$ date -u +%F -d "feb 29 2012"
>> 2012-02-29
~$ date -u +%F -d "feb 29 -3years"
>> date: invalid date ‘feb 29 -3years’
~$ date -u +%F -d 'feb 29 3 years ago'
>> date: invalid date ‘feb 29 3 years ago’ 

这发生在所有闰年/闰日(... 2008/2012/2016 ......),我无法弄清楚原因。

我'我在我的Ubuntu Gnome Edition(15.04)和运行Debian / Jessie的服务器上运行命令。

1 个答案:

答案 0 :(得分:2)

它有点像hacky但是获得本月最后一天的好方法是到下个月的第一天,然后回到一天:

$ date -u +%F -d "mar 1 -3years -1day"
2012-02-29

我没有声称知道date命令是如何实现的,但在进行减法之前,feb 29是解释字符串的第一部分是合理的。所以最安全的做法是使用一个始终有效的日期,然后进行一系列的减法。