エラーメッセージ「日付:無効な日付 '2016-10-16'」


35

今日、私の時計は自動的に夏時間に調整され、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

これは何が原因ですか?


このコマンドを実行しているOSは何ですか?Debian 8では再現できません。2つの異なるlocalesで試しました:sv_SE.utf8en_us.utf-8
maulinglawns

2
ブラジルは何時(夜)に夏時間に時計を進めますか?
テクラフ

私は、問題が発生する可能性が低い朝の2時など、遅い時間にシフトするすべての国です。
njzk2

回答:


57

問題は、夏時間が変更され、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日付にはこの問題はありません。入力ゾーンがタイムゾーンで無効な場合、有効な時間に達するまで静かに1時間進められます:

$ TZ=America/Sao_Paulo date -j -f '%Y%m%d%H%M' 201610160000
Sun Oct 16 01:00:53 BRST 2016

1時間53秒?!
-domen

それで、それはあまりにも遠くまで53秒だけ時間を調整しましたか?または、私は何かを誤解しましたか?
-domen

1
ああ、理にかなっています。(クリアではなく)指定されていないデータを保持します。この場合、00:59:07までに順方向に調整するだけで十分であるため、少し奇妙です。
-domen

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.