Проблема в том, что летнее время изменилось и перешло 1 час 16 октября 2016 года в вашем часовом поясе:
$ 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
locale
s:sv_SE.utf8
иen_us.utf-8
.