¿Comando de Linux para verificar dónde este día es un día de cambio de horario de verano y en qué dirección?

¿Comando de Linux para verificar dónde este día es un día de cambio de horario de verano y en qué dirección?

Actualmente estoy diseñando una solución para sincronizar un Reloj en un Equipo. Cada vez que se enciende el Equipo después de un apagado, su Reloj marca exactamente "01:01". Para sincronizar este Equipo, tengo un interruptor remoto NEXA y un dúo Telldus. El dúo Telldus está conectado a un servidor que es un servidor NTP con fuente GPS y PPS.

Ahora al problema: actualmente, el reloj se sincroniza simplemente apagando la energía programada a las 01:00 y luego encendiendo la energía a las 01:01, lo que hace que el reloj del equipo siempre funcione correctamente.

Pero el problema está en los días de cambio de horario de verano. Si hay un día de cambio de horario de verano que indica que el reloj debe adelantarse 1 hora entre las 02:00 y las 03:00, entonces el reloj del equipo se atrasará 1 hora en un día completo. Si hay un día de cambio de horario de verano que indica que el reloj debe retroceder 1 hora, entonces el equipo funcionará 1 hora más rápido.

Por lo tanto, en los días DST FORWARD, necesito programar el equipo para que se apague a las 00:00 y se encienda a las 00:01. Entonces el Equipo será las 01:01 cuando el Reloj sea las 00:01. Cuando el reloj es las 02:00 y se cambia a las 03:00, el equipo ya estará a las 03:00, por lo que el equipo solo tendrá un reloj incorrecto durante 2 horas.

Y en los días DST BACK, necesito programar el equipo para que se apague a las 02:00 y se encienda a las 02:01. Por lo tanto, el equipo será las 02:00 cuando el reloj sea las 03:00 y el horario de verano vuelva a las 02:00, por lo que, en este caso, el reloj del equipo solo será incorrecto durante 1 hora.


Tengo plena capacidad para escribir un script que logre esto, TENIENDO EN CUENTA QUE:

Conozco un comando que puede decirme si HOY es el día en que ocurrirá un cambio de horario de verano y en qué dirección (02:00 a 03:00, o 03:00 a 02:00) ocurrirá.

Esto significa que necesito algún comando de DST dedicado O una posibilidad de "mirar en el futuro", como "¿Cuál es el reloj cuando han transcurrido 4 horas a partir de ahora, teniendo en cuenta el horario de verano?". (Entonces podría comprobar, si la diferencia entre el reloj actual y el devuelto es de 3 horas, entonces es un día DST-BACK, 4 horas, luego es un día SIN DST y 5 horas, entonces es un día DST-FORWARD)

¿Alguien que tenga una idea de tal comando?

Respuesta1

Intentar:

$ 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 las fechas en las que cambia el horario de verano. Cambie el Europe/Londona su zona horaria.

O, un poco más largo:

$ 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

Lo que imprime los cambios de hora también. La última columna muestra si está ingresando DST ( 1significa ingresar DST).

Respuesta2

Si alguien ha venido aquí a través de Google buscando un comando simple de detección de horario de verano para el terminal Linux, esto es suficiente. Sin embargo, esto no es lo suficientemente complejo para la pregunta de OP.

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

*el octavo elemento en la salida de hora local en perl es $isdsthttp://perldoc.perl.org/functions/localtime.html

Respuesta3

Simplemente le preguntaría al sistema cómo imprimiría la hora en exactamente 24 horas:

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

Precaución, no ejecute esto a la hora en punto...

información relacionada