Linux comando para verificar onde este dia é um dia de mudança de horário de verão e qual direção?

1

Estou atualmente projetando uma solução para sincronizar um relógio em um equipamento. Cada vez que o equipamento é ligado após um poweroff, o seu relógio é exatamente "01:01". Para sincronizar este equipamento, eu tenho um controle remoto NEXA e um duo Telldus. O Telldus duo está conectado a um servidor que é um servidor NTP com fonte GPS e PPS.

Agora, para o problema: Atualmente, o relógio sincroniza simplesmente desligando a energia programada às 01:00 e ligando a energia 01:01, fazendo com que o relógio do equipamento esteja sempre correto.

Mas o problema está nos dias de alteração do horário de verão. Se houver um dia de alteração do horário de verão que diga que o relógio deve ser movido para a frente por 1 hora, das 02:00 às 03:00, o relógio do equipamento ficará atrasado em 1 hora em um dia inteiro. Se houver um dia de alteração do horário de verão que diga que o relógio deve ser movido de VOLTA 1 hora, o equpment estará funcionando 1 hora mais rápido.

Assim, nos Dias de Desvio do DST, preciso Agendar o Equipamento para desligar às 00:00 e ligar às 00:01. Então o equipamento será 01:01 quando o relógio for 00:01. Quando o relógio é 02:00 e é alterado para 03:00, então o equipamento já será às 03:00, assim, o equipamento só terá relógio incorreto por 2 horas.

E nos Dias de Retorno do DST, eu preciso Agendar o Equipamento para desligar às 02:00 e ligar às 02:01. Assim, o Equipamento será 02:00 quando o Relógio for 03:00 e será DST'ed de volta às 02:00, portanto, neste caso, o Relógio do Equipamento estará incorreto somente por 1 hora.

Eu tenho a total capacidade de escrever um script que irá realizar isso, DADA ISSO:

Eu conheço um comando, que pode me dizer, se HOJE for o dia em que uma mudança de horário de verão ocorrerá e em qual direção (de 02:00 a 03:00 ou de 03:00 a 02:00) ocorrerá .

Isso significa que eu preciso de algum comando DST dedicado OU uma possibilidade de "olhar no futuro", como "O que é o Relógio quando decorreram 4 horas contando DST?". (Então eu poderia verificar se a diferença entre agora e o relógio retornado é de 3 horas, então é um dia DST-BACK, 4 horas, então é um dia NO-DST e 5 horas depois é um dia DST-FORWARD)

Alguém que tenha uma ideia de tal comando?

    
por sebastian nielsen 30.08.2014 / 21:13

3 respostas

1

Tente:

$ 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

Que imprime as datas nas quais o horário de verão é alterado. Altere o Europe/London para o seu fuso horário.

Ou um pouco mais:

$ 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

Que imprime as alterações de hora também. A última coluna mostra se você está digitando DST ( 1 significa digitar DST).

    
por 30.08.2014 / 22:13
0

Se alguém acessou o Google procurando por um simples comando de detecção de horário de verão para o terminal Linux, isso é suficiente. Isso não é complexo o suficiente para a pergunta do OP.

if perl -e 'exit ((localtime)[8])' ; then
    echo no DST
else
    echo DST
fi

* o oitavo elemento na saída do localtime em perl é $ isdst link

    
por 24.07.2017 / 18:15
0

Gostaria apenas de perguntar ao sistema como ele imprimia a hora em exatamente 24 horas:

now=$(date +%H)
then=$(date -d '24 hours' +%H)
dst_change=$(( then - now ))

Cuidado, não corra na hora certa ...

    
por 24.07.2017 / 21:59