
저는 현재 장비의 시계를 동기화하는 솔루션을 설계하고 있습니다. 전원을 끈 후 장비를 켤 때마다 시계는 정확히 "01:01"입니다. 이 장비를 동기화하기 위해 NEXA 원격 스위치와 Telldus 듀오가 있습니다. Telldus duo는 GPS 및 PPS 소스를 갖춘 NTP 서버인 서버에 연결됩니다.
문제는 다음과 같습니다. 현재 시계는 01:00에 예약된 전원을 끄고 01:01에 전원을 켜는 방식으로 동기화되므로 장비의 시계가 항상 올바르게 작동합니다.
그러나 문제는 DST 변경일에 있습니다. 시계를 02:00에서 03:00까지 1시간 앞으로 이동해야 하는 DST 변경일이 있는 경우 장비의 시계는 하루에 1시간씩 늦어집니다. 시계를 1시간 뒤로 이동해야 한다는 DST 변경 날짜가 있는 경우 장비가 1시간 너무 빠르게 실행됩니다.
따라서 DST FORWARD 일에는 장비가 00:00에 꺼지고 00:01에 켜지도록 예약해야 합니다. 그러면 시계가 00:01일 때 장비는 01:01이 됩니다. 시계가 02:00이고 03:00으로 변경되면 장비는 이미 03:00에 있으므로 장비는 2시간 동안만 잘못된 시계를 갖게 됩니다.
그리고 DST BACK Days에는 장비가 02:00에 꺼지고 02:01에 켜지도록 예약해야 합니다. 따라서 시계가 03:00일 때 장비는 02:00가 되고 DST는 다시 02:00으로 적용됩니다. 따라서 이 경우 장비의 시계는 1시간 동안만 정확하지 않습니다.
나는 이것을 달성할 스크립트를 작성할 수 있는 모든 능력을 가지고 있습니다.
나는 오늘이 DST 변경이 발생하는 날인지, 그리고 어느 방향(02:00에서 03:00 또는 03:00에서 02:00)이 발생하는지 알려줄 수 있는 명령을 알고 있습니다.
이는 전용 DST 명령이 필요하거나 "DST를 고려하여 지금부터 4시간이 경과한 시계는 무엇입니까?"와 같이 "미래를 살펴보는" 가능성이 필요하다는 것을 의미합니다. (그런 다음 현재 시계와 반환된 시계의 차이가 3시간이면 DST-BACK 날짜, 4시간, DST 없음 날짜, 5시간 다음 DST-FORWARD 날짜인지 확인할 수 있습니다.)
그런 명령에 대한 아이디어가 있는 사람이 있나요?
답변1
노력하다:
$ zdump -v Europe/London -c $(date '+%Y'),$(date -d '+1 year' '+%Y') | awk -v y=$(date '+%Y') '$6==y && $15~1 {print $4, $3, $6}'
30 Mar 2014
26 Oct 2014
DST가 변경되는 날짜를 인쇄합니다. 귀하의 시간대로 변경하십시오 Europe/London
.
또는 약간 더 깁니다.
$ zdump -v Europe/London -c $(date '+%Y'),$(date -d '+1 year' '+%Y') | awk -v y=$(date '+%Y') '
($6==y && dst=="") {dst=$15}
($6==y && dst==$15) {ftime=$12; dst=$15;}
($6==y && dst!=$15) {print ftime, "to", $12, "on", $4, $3, $6, $15; dst=$15}'
00:59:59 to 02:00:00 on 30 Mar 2014 isdst=1
01:59:59 to 01:00:00 on 26 Oct 2014 isdst=0
시간 변화도 인쇄합니다. 마지막 열에는 DST를 입력하는지 여부가 표시됩니다( 1
DST 입력을 의미).
답변2
Linux 터미널에 대한 간단한 일광 절약 시간제 감지 명령을 찾기 위해 Google을 통해 여기에 온 사람이 있다면 이것으로 충분합니다. 그러나 이것은 OP의 질문에 비해 충분히 복잡하지 않습니다.
if perl -e 'exit ((localtime)[8])' ; then
echo no DST
else
echo DST
fi
*perl의 localtime 출력에서 8번째 요소는 $isdst입니다.http://perldoc.perl.org/functions/localtime.html
답변3
나는 정확히 24시간 안에 시간을 어떻게 인쇄할지 시스템에 묻고 싶습니다.
now=$(date +%H)
then=$(date -d '24 hours' +%H)
dst_change=$(( then - now ))
주의, 정각에 이것을 실행하지 마십시오 ...