В Бразилии летнее время начинается в полночь. Это отличается от большинства частей мира, где изменение происходит в 2:00 утра, именно из-за путаницы, которая вызывает этот вопрос.
ПРИМЕЧАНИЕ: Ниже представлена информация в файле часового пояса, установленном в настоящее время на моем компьютере, и предположительно информация об OP. Тем не менее, в декабре 2017 года правительство Бразилии решило отложить летнее время на две недели в этом году, поэтому переход фактически будет 4 ноября 2018 года. Надеемся, что база данных TZ будет обновлена до этого.
Не все бразильские штаты меняют свои часы дважды в год. По крайней мере, в одном штате (Матто Гросу) решение принимается отдельными муниципалитетами.
Таким образом, в Сан-Паулу 21 октября 2018 года не будет 00:00:00. Когда часы отсчитывают секунду с 23:59:59 20 октября 2018 года, наступит летнее время, а в воскресенье начало в 1:00:
$ TZ=America/Sao_Paulo date -d "23:59:59 2018-10-20"
Sat Oct 20 23:59:59 -03 2018
$ TZ=America/Sao_Paulo date -d "23:59:59 2018-10-20 +1 second"
Sun Oct 21 01:00:00 -02 2018
Обратите внимание на изменение смещения TZ.
Когда вы просто вводите дату без времени, время по умолчанию равно 0:00:00. Если это время не существует в данный день, date
жалуется:
$ TZ=America/Sao_Paulo date -d "2018-10-21"
date: invalid date ‘2018-10-21’
$ TZ=America/Sao_Paulo date -d "00:00:00 2018-10-21"
date: invalid date ‘00:00:00 2018-10-21’
$ TZ=America/Sao_Paulo date -d "00:30:00 2018-10-21"
date: invalid date ‘00:30:00 2018-10-21’