Komunikat o błędzie „data: nieprawidłowa data 16.10.2016”

35

Dzisiaj mój zegar został automatycznie dostosowany do czasu letniego i skrypt z crontab zaczął zawodzić. Spojrzałem na to, co się dzieje, i wyświetlił się następujący błąd LC_ALL=C:

data: nieprawidłowa data „2016-10-16”

Myślałem, że najlepiej będzie zrestartować system, ale teraz uruchomiłem ponownie, a błąd nadal pojawia się:

$ 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

Co może być tego przyczyną?

Teresa e Junior
źródło
Z jakiego systemu operacyjnego uruchamiasz to polecenie? Nie można powielać na Debianie 8. Próbowałem z dwoma różnymi locales: sv_SE.utf8i en_us.utf-8.
maulinglawns
2
O której porze dnia (nocy) Brazylia przekazuje zegary do czasu letniego?
techraf
Myślałem, że wszystkie kraje zmieniają się późno, jak 2 nad ranem, gdzie jest mniej prawdopodobne, że powodują problemy.
njzk2

Odpowiedzi:

57

Problemem jest zmiana czasu letniego i zmiana 1 godziny, 16 października 2016 r. W strefie czasowej:

$ 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

Tak więc każda chwila od 00:00do 00:59tego dnia jest uważana za niepoprawną w strefie czasowej (ale może ważna w innych):

$ 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

Możesz ustawić dodatkowy czas, który nie mieści się w tym zakresie:

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

Powyżej jest zachowanie daty GNU.

Data BSD nie ma tego problemu. Jeśli wprowadzona data jest niepoprawna w strefie czasowej, zostanie ona cicho dostosowana do przodu o 1 godzinę, aż osiągnie prawidłowy czas:

$ TZ=America/Sao_Paulo date -j -f '%Y%m%d%H%M' 201610160000
Sun Oct 16 01:00:53 BRST 2016
Cuonglm
źródło
1 godzina i 53 sekundy ?!
domen
Czyli skorygował czas o 53 sekundy za daleko w przyszłość? A może coś źle zrozumiałem?
domen
1
Ach, ma sens; zachowuje nieokreślone dane (w przeciwieństwie do czyszczenia). Nadal jest to trochę dziwne, ponieważ w tym przypadku wystarczy dostosowanie o 00:59:07.
domen