¿Alguna vez les ha pasado que el reloj de Windows muestra cualquier cosa? y me refiero a horas de diferencia y no solo algunos minutos de más o de menos... Las causas pueden ser varias, desde una pila deficiente del motherboard hasta algun soft que cambió la hora intencionalmente, pero aquí les voy a comentar otra situación menos conocida que les puede estar pasando y les va a ahorrar un dolor de cabeza.

Breve introducción


Hoy en día es bastante normal, incluso para personas que no son desarrolladores, tener instalado mas de un sistema operativo en sus computadoras.

Todos los sistemas operativos modernos incluyen una funcionalidad para actualizar la fecha y hora de su computadora en base a un servidor horario atómico, esto es, que de forma automática al iniciar y cada cierto tiempo, va a chequear que la hora sea la exacta y caso contrario, corregirla.

Hasta acá todo suena muy bueno en teoría, pero que sucede al tener dos sistemas operativos distintos en la misma pc? Mejor dicho, que sucede si tenemos un Windows (cualquier versión) y otro sistema operativo basado en Unix (Linux, OSx, etc)? Respuesta: Windows va a mostrar un horario incorrecto (horas de diferencia).

La explicación es bastante sencilla, y por suerte la solución también.

Explicación


Todos los sistemas Unix almacenan por defecto el horario de la computadora actualizado en formato GMT, que es el horario universal, sin tener en cuenta la zona horaria que se tenga configurada en los parámetros del sistema. Luego para mostrarla al usuario realiza el ajuste tomando en cuenta esto y muestra el horario correspondiente.
Windows, por su parte, almacena el horario incluyendo la zona horaria, esto es, por ejemplo, si está configurado el horario para Buenos Aires Argentina, GMT -3:00 hs, lo guardará así. Luego, para mostrarlo, solamente lee este valor, no realiza ninguna conversión. Esto funciona bien si el único que toca la hora es Windows, pero si como dijimos antes, tenemos otro SO instalado que la guarda en otro formato, al momento de leerla y mostrarla, sera un horario distinto y no el real.

Ejemplo práctico para que se entienda:

Horario Universal: 18hs GMT
Horario actual en Argentina: 15hs (GMT-3)
Linux mostrará: 15hs, ya que almacena internamente en el reloj de la pc 18hs y luego le resta 3 horas por estar en Argentina.
Windows mostrará: 18hs - siendo un error - ya que lee 18hs del reloj de la pc y piensa que este valor ya incluye la corrección de Argentina, mostrándolo tal cual.

Más confuso para diagnosticar este problema, es el hecho de que si actualizamos desde Windows la hora y volvemos a reiniciar luego en Windows, aparentemente es correcto, pero al momento de volver a Linux y luego volver a Windows, ya estará mal nuevamente.

Solución


En Windows, ir al menú inicio, ejecutar programa. O tocar desde el teclado la combinacion de teclas Windows+R (la que tiene el dibujo de la ventanita al lado del ALT). En la ventana que se abre escribir regedit.exe y tocar enter o aceptar.
Nota: tener mucho cuidado con lo que se toca acá ya que se puede desconfigurar el sistema.

Navegar hacia la siguiente ruta:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

Debajo de todos los valores que aparezcan en la parte derecha de la ventana, allí, en alguna parte en blanco, hacer click derecho con el mouse y elegir Nuevo->Dword

Nombrar la entrara como RealTimeIsUniversal, y colocarle el valor 1 (por defecto está en 0).

reloj windows

Listo!

Volver a iniciar la PC en Linux, esto va a actualizar el horario correcto en GMT, luego ya al volver a Windows, este ya sabrá que se está guardando en GMT y hará el ajuste correspondiente. Voilá!