Повідомлення про помилку "дата: недійсна дата" 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

Що може бути причиною цього?


З якої ОС ви виконуєте цю команду? Неможливо відтворити на Debian 8. Пробували два різні locales: sv_SE.utf8та en_us.utf-8.
maulinglawns

2
У який час доби (ночі) Бразилія пересилає годинник на літній час?
techraf

Я хоч у всіх країнах, де зрушення пізно, як 2 ранку, де менше шансів викликати проблеми.
njzk2

Відповіді:


57

Проблема полягає в тому, що 16 жовтня 2016 року у вашому часовому поясі змінено та переадресація літнього часу 16 годин:

$ 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.