coreutil 的 date 是如何得到如此奇怪的結果的?

coreutil 的 date 是如何得到如此奇怪的結果的?

我正在嘗試date將諸如“2 小時”之類的表達式轉換為諸如 7200 之類的秒數。

date -d "1970-01-01 00:00:00 + 2 hours" +"%s"

然而,我在這樣做時注意到了極其奇怪的結果。 (我的/etc/timezone包含“歐洲/巴黎”,因此使用 來TZ強制 UTC 時間。)

omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"             
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s" 
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s" 
-3540

第一個結果足夠合理,但我真的很困惑如何date得出最後三個結果。有人理解這些結果之間的邏輯嗎?

答案1

我認為它將您+ x作為時區說明符(例如,考慮2013-04-25 19:52:36 +4是一個有效的時間戳,在 UTC 之前 4 小時的時區中)。

然後它會看到“分鐘”這個詞,並將其視為分鐘的同義詞,因此稍後給您一分鐘。

如果您輸入明確的時區說明符,它會起作用:

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"   
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s" 
-60
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s" 
60

請注意UTC秒欄位之後。您也可以輸入第二個+0

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60

……但至少就個人而言,這更難閱讀。

或者您可以Z在秒後添加 a 等TZ

相關內容