Fehlermeldung "Datum: ungültiges Datum '2016-10-16'"

35

Heute wurde meine Uhr automatisch auf die Sommerzeit eingestellt, und ein Skript von einer Crontab schlug fehl. Ich habe mir angesehen, was gerade geschah, und der folgende Fehler wurde angezeigt LC_ALL=C:

Datum: ungültiges Datum '2016-10-16'

Ich dachte, es wäre am besten, nur das System neu zu starten, aber jetzt habe ich neu gestartet, und der Fehler erscheint immer noch:

$ 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

Was könnte das verursachen?

Teresa und Junior
quelle
Unter welchem ​​Betriebssystem führen Sie diesen Befehl aus? Kann nicht auf Debian 8 reproduzieren. Versucht mit zwei verschiedenen locales: sv_SE.utf8und en_us.utf-8.
Maultinglawns
2
Zu welcher Tageszeit (Nacht) leitet Brasilien die Uhren zur Sommerzeit weiter?
Techraf
Ich denke jedoch, dass alle Länder zu einem späten Zeitpunkt wechseln, beispielsweise um 2 Uhr morgens, wo es weniger wahrscheinlich ist, dass Probleme auftreten.
njzk2

Antworten:

57

Das Problem ist, dass die Sommerzeit am 16. Oktober 2016 um 1 Stunde in Ihrer Zeitzone geändert und weitergeleitet wurde:

$ 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

Daher wird jede Zeit zwischen 00:00bis 00:59an diesem Tag in Ihrer Zeitzone als ungültig angesehen (aber möglicherweise in anderen als gültig):

$ 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

Sie können eine zusätzliche Zeit einstellen, die nicht in diesem Bereich liegt:

$ TZ=America/Sao_Paulo gdate -d '2016-10-16 1:00'
Sun Oct 16 01:00:00 BRST 2016

Das obige ist GNU Datumsverhalten.

BSD-Datum hat dieses Problem nicht. Wenn das eingegebene Datum in der Zeitzone ungültig ist, wird es stillschweigend 1 Stunde vorwärts angepasst, bis eine gültige Zeit erreicht ist:

$ TZ=America/Sao_Paulo date -j -f '%Y%m%d%H%M' 201610160000
Sun Oct 16 01:00:53 BRST 2016
cuonglm
quelle
1 Stunde und 53 Sekunden ?!
Domen
Also hat es die Zeit um 53 Sekunden zu weit in die Zukunft verstellt? Oder habe ich etwas falsch verstanden?
Domen
1
Aah, macht Sinn; Erhält die nicht angegebenen Daten (im Gegensatz zum Löschen). Immer noch etwas seltsam, da es in diesem Fall ausreichen würde, um 00:59:07 vorwärts zu fahren.
Domen
Lassen Sie uns diese Diskussion im Chat fortsetzen .
Domen