En mi ordenador principal tengo Debian 12 y Windows 11. Tanto en Debian como en Windows tengo activada la opción de sincronizar la hora automáticamente, pero sospecho que esto debe funcionar para los cambios de horario de invierno y verano ya que si cambias la hora manualmente, esta se queda tal cual, no se sincroniza con la real. Y de hecho ocurre algo muy curioso, y es que si tienes ambos sistemas instalados y entras en cada uno de ellos, verás como la hora se ha desfasado en ambos, teniendo que volver a ajustar el tiempo en cada uno de ellos.
El sistema operativo GNU-Linux almacena la hora en el formato UTC, mientras que Windows la almacena en formato de hora local. Esto ocasiona que al cambiar entre sistemas operativos se produzcan desfases de hora.
La solución pasa por activar la sincronización NTP (Network Time Protocol) es un protocolo de Internet para sincronizar los relojes de los sistemas informáticos a través del enrutamiento de paquetes en redes con latencia variable.
Esto se debe de hacer en los dos sistemas operativos.
timedatectl para controlar la fecha y la hora del sistema en Linux
El comando timedatectl
es el comando en Linux que te permite consultar y cambiar el reloj del sistema y su configuración. Viene como parte de systemd, un reemplazo del demonio sysvinit utilizado en los sistemas GNU/Linux y Unix.
En este artículo, analizaremos este comando y las funciones que proporciona mediante ejemplos relevantes.
Nota : todos los ejemplos descritos en este artículo se prueban en GNU bash, versión 5.2.15(1).
Mostrar información de fecha/hora del sistema
Simplemente ejecute el comando sin opciones ni indicadores de línea de comando y le brindará información sobre la fecha y hora actuales del sistema, así como la configuración relacionada con la hora. Por ejemplo, aquí está el resultado cuando ejecuté el comando en mi sistema:
timedatectl
El resultado de ejecutar el comando anterior sería el siguiente:
Entonces puede ver que el resultado contiene información sobre LTC, UTC y zona horaria, así como configuraciones relacionadas con NTP, RTC y DST para el host local.
Configurar la sincronización horaria de la red basada en NTP (recomendada)
NTP, o Network Time Protocol, es un protocolo de red para la sincronización del reloj entre sistemas informáticos a través de redes de datos de latencia variable y conmutación de paquetes. Su objetivo es sincronizar todas las computadoras participantes dentro de unos pocos milisegundos de UTC.
El comando timedatectl
proporciona una opción set-ntp
que controla si la sincronización de hora de red basada en NTP está habilitada. Esta opción espera un argumento booleano.
Instala el servicio NTP
sudo apt install systemd-timesyncd
Para habilitar la sincronización horaria basada en NTP, ejecute el siguiente comando:
timedatectl set-ntp true
Ahora tenemos activo el servicio NTP que sincronizará la hora automáticamente desde internet.
Hasta aquí sería suficiente para dejar el sistema funcionando. Este es el modo que he elegido ya que la hora siempre se actualiza con la hora de internet.
Si deseas deshabilitar el servicio NTP, ejecuta:
timedatectl set-ntp false
Cómo corregir el cambio de hora en Windows
Cabe advertir que hay diferentes formas de corregir el cambio de hora en Windows: la más accesible es hacerlo directamente desde las opciones del reloj, de manera manual, sin embargo, hacerlo manual no tiene sentido. La forma más sencilla de aplicar el cambio de hora en Windows de manera automática y fiable es… que Windows imite a Linux y utilice la hora UTC de manera predeterminada. Para ello, hay que modificar el registro de Windows.
1. Abre el editor del registro de Windows.
2. Acepta que «esta aplicación haga cambios en el dispositivo».
3. Ve a: «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation» (puedes copiar y pegar la ruta en la barra de direcciones del editor, sin las comillas).
4. Abre el menú contextual sobre la carpeta «TimeZoneInformation» en el panel lateral y crea un valor nuevo como ves en la imagen («QWORD» para sistemas de 64-bit, «DWORD» para sistemas de 32-bit). Como nombre ponle «RealTimeIsUniversal«.
5. Abre el menú contextual sobre el valor ya creado, elige la opción «Editar el valor de…» y cámbialo de «0» a «1». Y ya puedes cerrar el editor.
Eso es todo, ahora los dos sistemas actualizarán sus horas de forma automática sin que tengas que hacer nada.
Otros modos de configurar la fecha y la hora en Linux
Configurar manualmente la fecha y hora.
Para configurar el reloj del sistema en una fecha u hora específica, use la opción set-time
seguida de una cadena que contenga la nueva información de fecha/hora. Por ejemplo, para cambiar la hora del sistema a las 19:58:27 pm, utilicé el siguiente comando:
timedatectl set-time "2023-11-04 19:58:27"
y aquí está el resultado:
Observe que el campo Hora local ahora muestra la hora actualizada. Del mismo modo, también puedes actualizar la fecha del sistema.
Actualice la zona horaria del sistema usando la opción set-timezone
Para establecer la zona horaria del sistema en el valor especificado, puede usar la opción set-timezone
seguida del valor de la zona horaria. Para ayudarle con la tarea, el comando timedatectl
también proporciona otra opción útil. list-timezones
le proporciona una lista de zonas horarias disponibles para elegir.
Por ejemplo, aquí está la lista desplegable de zonas horarias que el comando timedatectl
produjo en mi sistema:
timedatectl list-timezones
Para cambiar la zona horaria actual del sistema de Asia/Kolkata a Asia/Katmandú, este es el comando que utilicé:
timedatectl set-timezone Africa/Cairo
y para verificar el cambio, aquí está el resultado del comando timedatectl
Puede ver que la zona horaria se cambió al nuevo valor.
Configurar RTC
También puede utilizar el comando timedatectl
para configurar RTC (reloj en tiempo real). Para aquellos que no lo saben, RTC es un reloj de computadora que funciona con baterías y que registra la hora incluso cuando el sistema está apagado. El comando timedatectl
ofrece una opción set-local-rtc
que se puede utilizar para mantener el RTC en hora local o en hora universal.
Esta opción requiere un argumento booleano. Si se suministra 0, el sistema está configurado para mantener el RTC en hora universal:
$ timedatectl set-local-rtc 0
pero en caso de que se proporcione 1, mantendrá el RTC en la hora local.
$ timedatectl set-local-rtc 1
Una advertencia : mantener el RTC en la zona horaria local no es totalmente compatible y creará varios problemas con los cambios de zona horaria y los ajustes del horario de verano. Si es posible, utilice RTC en UTC.
Otro punto que vale la pena señalar es que si set-local-rtc
se invoca y --adjust-system-clock
se pasa la opción, el reloj del sistema se sincroniza nuevamente desde el RTC, teniendo en cuenta la nueva configuración. De lo contrario, el RTC se sincroniza desde el reloj del sistema.
Conclusión
Como se desprende de los ejemplos descritos anteriormente, el comando timedatectl
es una herramienta útil para los administradores de sistemas que pueden usarlo para ajustar varios relojes del sistema y configuraciones de RTC, así como para sondear servidores remotos en busca de información horaria. Para obtener más información sobre el comando, diríjase a su página de manual .