Messaggio di errore “data: data non valida '16-10-2016'”


35

Oggi il mio orologio è stato automaticamente adattato all'ora legale e uno script di un crontab ha iniziato a fallire. Ho dato un'occhiata a ciò che stava accadendo e veniva visualizzato il seguente errore, con LC_ALL=C:

data: data non valida '16-10-2016'

Ho pensato che sarebbe meglio riavviare il sistema, ma ora ho riavviato e l'errore appare ancora:

$ 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

Che cosa potrebbe causare questo?


Da quale sistema operativo stai eseguendo questo comando? Impossibile riprodurre su Debian 8. Provato con due diversi locales: sv_SE.utf8e en_us.utf-8.
Maulinglawns

2
A che ora del giorno (notte) il Brasile inoltra gli orologi all'ora legale?
techraf

Pensavo che tutti i paesi si spostassero in ritardo, come le 2 del mattino, dove è meno probabile che causino problemi.
njzk2,

Risposte:


57

Il problema è che l'ora legale è cambiata e inoltrata di 1 ora, il 16 ottobre 2016 nel tuo fuso orario:

$ 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

Quindi, qualsiasi momento tra 00:00a 00:59quel giorno è considerato non valido nel tuo fuso orario (ma forse valido in altri):

$ 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

È possibile impostare un tempo aggiuntivo, che non rientra in tale intervallo:

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

Quanto sopra è il comportamento della data GNU.

La data BSD non presenta questo problema. Se la data di inserimento non è valida nel fuso orario, verrà silenziosamente regolata in avanti di 1 ora fino a quando non raggiunge un orario valido:

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

1 ora e 53 secondi ?!
domen,

Quindi ha regolato il tempo di 53 secondi troppo lontano nel futuro? O ho frainteso qualcosa?
domen,

1
Aah, ha un senso; conserva i dati non specificati (al contrario della cancellazione). Ancora un po 'strano, in questo caso sarebbe sufficiente adattarsi in avanti di 00:59:07.
domen,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.