
我見過幾個例子(包括這個郵政)而且看起來很簡單,但我不太明白我做錯了什麼(我知道該帖子是針對Linux的,但我嘗試在date
Linux機器上使用該命令並在那裡得到相同的結果)
命令和輸出範例
me@mymachine~$ gdate -d '2019-10-19 01:37:02 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 14:37:02
我希望結果以 開始2019-10-26
。所以看起來它沒有解析我的輸入,對吧?
更奇怪的是(無論如何對我來說),如果我去掉輸入的時間部分,它就會按預期工作
me@mymachine~$ gdate -d '2019-10-19 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-26 00:00:00
答案1
分析
我在 Debian 9 中做了一些測試,研究man 1 date
了info date
.後者包含有關如何2019-10-19 01:37:02 +7 days
解釋字串的更多資訊。
初步說明:
- 我的回答使用了,
date
因為這是 Debian 中的工具。 (用於alias date=gdate
測試我的命令,而gdate
無需每次都編輯它們)。 - 看來您的時區大致相當於
TZ=UTC+4
。
我嘗試複製你的結果:
$ date -d '2019-10-19 01:37:02 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 20:37:02
我的結果不同,這表明時區很重要。要真正複製您的結果:
$ TZ=UTC+4 date -d '2019-10-19 01:37:02 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 14:37:02
解釋
事實證明+7
,您的“行為不當”命令被解釋為UTC+7
並被days
解釋為+1 days
。比較:
$ TZ=UTC+4 date -d '2019-10-19 01:37:02 UTC+7 +1 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 14:37:02
(註TZ=UTC+4
是指UTC-04:00whileUTC+7
在字串中意味著世界標準時間+07:00。與標誌不一致的情況已得到解釋這裡.)
神秘的結果現在不再那麼神秘了。
怪癖
真正奇怪的是:
$ TZ=UTC+4 date -d '2019-10-19 01:37:02 UTC+7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-25 21:37:02
顯然它不是UTC+7
and days
(含義+1 days
如上)而是UTC
(含義UTC+0
) and +7 days
:
$ TZ=UTC+4 date -d '2019-10-19 01:37:02 UTC+0 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-25 21:37:02
解決方案
將+7 days
子字串移向開頭,使其出現在 之前01:37:02
。這種方式+7
不會被解釋為UTC+7
:
$ date -d '2019-10-19 +7 days 01:37:02' +"%Y-%m-%d %H:%M:%S"
2019-10-26 01:37:02
現在01:37:02
,輸入字串根據任何date
認為正確的時區進行解釋。結果*對於歐洲的我、美國、澳洲等任何地方的其他使用者來說應該是一樣的。這就是我放棄的原因TZ=UTC+4
,現在已經不重要了。
*我的意思是字串印製的date
應該是相同的。不同的使用者會在不同的時區解釋同一個字串,他們在現實中會得到不同的時刻。從這個意義上說,他們的結果是不同的。從同樣的意義上說,他們的輸入是不同的。