오늘 내 시계는 일광 절약 시간제로 자동 조정되었으며 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
원인은 무엇일까요?
답변1
문제는 해당 시간대의 일광 절약 시간이 변경되어 2016년 10월 16일에 1시간 앞당겨졌다는 것입니다.
$ 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