2015-09-17 102 views
0

我今天正在使用date命令,並發現了一些我無法解釋的行爲(我通過瀏覽:〜$ info'(coreutils)日期調用'但didn'找不到任何東西),並希望這裏的某個人能幫助我理解爲什麼會發生這種情況。bash日期無效日期(-d'feb 29 -3years')

~$ 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版(15.04)和運行Debian/Jessie的服務器上運行上述命令。

+2

看起來日期試圖在2015年2月29日之前減去3年,並且2015年沒有2月29日 –

回答

2

它有點哈克但得到該月的最後一天的好方法是一天就可以到下個月的第一天,然後再返回:

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

我不主張知道date命令是如何實現的,但是在進行減法之前,feb 29是被解釋的字符串的第一部分。所以最安全的做法是使用一個總是有效的日期,然後進行一系列的減法。

+0

這有助於在尋找閏日時我遇到了這種行爲,同時測試了我寫信給的腳本一年中某個月的所有日子。我只是轉而使用2014,2015,2016等年來解決它。 [我閱讀](https://www.gnu.org/software/coreutils/manual/html_node/Relative-items-in-date-strings.html#Relative-items-in-date-strings)但找不到除最後一句之外的任何提示。 – poeserDaddler