Hola,
Como muchas cosas es relativo y depende de muchos factores; por ejemplo si tienes bien configurado el país y el idioma en el sistema operativo.
Hay dos formas de manejar el reloj, una es usar el reloj hardware en UTC y la otra es llevar un reloj por software que agrega o quita horas dependiendo de tu ubicación al reloj hardware.
Por decirlo así, cuando son las 12:00 del medio día en el meridiano de Greenwich GMT puede ser que sean las 19:00 de la noche en tu país y adicionalmente a eso hay que quitarle o sumarle horas dependiendo si tu país está afecto a 'daylight saving'. En este caso el reloj hardware interno de la PC indica 12:00 pero tu ves 19:00 porque así está configurado el sistema. El otro caso es que el reloj de la PC interno diga 19:00 y sean las 19:00 realmente.
Primero tendrías que saber cual es la hora real de tu PC viendo el BIOS (si la muestra), segundo tendrías que saber si el sistema operativo está en reloj harware o software (en Windows siempre está en hardware pero Linux puede estar en uno u el otro).
Después tienes que revisar que el sistema operativo y la consola donde está corriendo tu programa está bien configurada en el TimeZone y el Locale. Podrías averiguar el TimeZone con:
También podrías probar a usar el constructor con TimeZone:
También tienes que ver si el reloj que te muestra la hora de tu PC realmente está mostrando la hora correcta (no la hora correcta de tu pais, la hora correcta del reloj hardware de tu PC). Por cierto, lo mas probable es que no esté bien configurado el TimeZone en tu sistema operativo y hace 'daylight savings', le quita o suma una hora al día durante un periodo del año.
Saludos,