Date
錯誤消息“日期:無效日期 ‘2016-10-16’”
今天我的時鐘自動調整為夏令時,來自 crontab 的腳本開始失敗。我看了看發生了什麼,並顯示以下錯誤
LC_ALL=C
:日期:無效日期“2016-10-16”
我雖然最好只是重新啟動系統,但現在我已經重新啟動,並且仍然出現錯誤:
$ date -d '2016-10-15' Sat Oct 15 00:00:00 BRT 2016 $ date -d '2016-10-16' date: data inválida “2016-10-16” $ date -d '2016-10-17' Mon Oct 17 00:00:00 BRST 2016
這可能是什麼原因造成的?
問題是夏令時在您的時區於 2016 年 10 月 16 日更改並轉發了 1 小時:
$ zdump -v America/Sao_Paulo | awk '/Oct 16/ && /2016/' America/Sao_Paulo Sun Oct 16 02:59:59 2016 UTC = Sat Oct 15 23:59:59 2016 BRT isdst=0 America/Sao_Paulo Sun Oct 16 03:00:00 2016 UTC = Sun Oct 16 01:00:00 2016 BRST isdst=1
00:00
因此,從那天到00:59
那天之間的任何時間在您的時區都被認為是無效的(但在其他時區可能有效):$ TZ=America/Sao_Paulo gdate -d '2016-10-16 0:59' gdate: invalid date ‘2016-10-16 0:59’ $ TZ=Asia/Ho_Chi_Minh gdate -d '2016-10-16 0:59' Sun Oct 16 00:59:00 ICT 2016
您可以設置不在該範圍內的額外時間:
$ TZ=America/Sao_Paulo gdate -d '2016-10-16 1:00' Sun Oct 16 01:00:00 BRST 2016
以上是 GNU 日期行為。
BSD date 沒有這個問題。如果輸入的日期在時區中無效,它將被靜默地向前調整 1 小時,直到達到有效時間:
$ TZ=America/Sao_Paulo date -j -f '%Y%m%d%H%M' 201610160000 Sun Oct 16 01:00:53 BRST 2016