Date

錯誤消息“日期:無效日期 ‘2016-10-16’”

  • October 24, 2016

今天我的時鐘自動調整為夏令時,來自 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

引用自:https://unix.stackexchange.com/questions/316695