我正在嘗試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
。