Comando do Linux para verificar onde este dia é um dia de mudança de horário de verão e em que direção?

Comando do Linux para verificar onde este dia é um dia de mudança de horário de verão e em que direção?

Atualmente estou projetando uma solução para sincronizar um relógio em um equipamento. Cada vez que o Equipamento é ligado após um desligamento, seu Relógio marca exatamente “01:01”. Para sincronizar este Equipamento, possuo um switch remoto NEXA e um Telldus duo. O Telldus duo está conectado a um servidor que é um servidor NTP com fonte GPS e PPS.

Agora vamos ao problema: Atualmente, o Relógio sincroniza simplesmente desligando a Energia programada para 01:00, e depois ligando a Energia 01:01, fazendo com que o Relógio do Equipamento fique sempre correto.

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

Assim, nos Dias DST FORWARD, preciso Programar o Equipamento para desligar às 00h00 e ligar às 00h01. Então o Equipamento será 01:01 quando o Relógio for 00:01. Quando o Relógio for 02:00 e for alterado para 03:00, então o Equipamento já estará às 03:00, portanto o Equipamento só terá Relógio incorreto por 2 horas.

E nos dias de DST BACK, preciso programar o equipamento para desligar às 02h00 e ligar às 02h01. Assim o Equipamento será 02:00 quando o Relógio for 03:00 e o horário de verão voltar para 02:00, portanto neste caso o Relógio do Equipamento só estará incorreto por 1 hora.


Tenho total capacidade para escrever um script que fará isso, CONSIDERANDO QUE:

Conheço um comando que pode me dizer se HOJE é o dia em que ocorrerá uma mudança de horário de verão e em que direção (02h00 às 03h00 ou 03h00 às 02h00) ela ocorrerá.

Isso significa que preciso de algum comando de horário de verão dedicado OU da possibilidade de "olhar no futuro", como "Qual é o relógio quando já passaram 4 horas, contabilizando o horário de verão?". (Então eu poderia verificar, se a diferença entre o relógio atual 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, então é um dia DST-FORWARD)

Alguém que tenha ideia desse comando?

Responder1

Tentar:

$ 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 em que o horário de verão muda. Mude Europe/Londonpara 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

O que imprime a hora muda também. A última coluna mostra se você está inserindo o horário de verão ( 1significa inserir o horário de verão).

Responder2

Se alguém veio aqui através do Google em busca de um comando simples de detecção de horário de verão para o terminal Linux, isso é suficiente. No entanto, 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 8º elemento na saída do horário local em perl é $isdsthttp://perldoc.perl.org/functions/localtime.html

Responder3

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

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

Cuidado, não faça isso de hora em hora em ponto...

informação relacionada