Skip to content

Time Issue in Windows and Linux

One of the most common and annoying problems when using Windows and Linux on the same computer is constant system time desynchronization.

Linux uses UTC as hardware time by default:

  1. System reads time from BIOS as UTC
  2. Applies timezone offset
  3. Displays local time to user

Example: If BIOS has 12:00 UTC and you’re in UTC+3 timezone, Linux will show 15:00.

Windows uses local time directly:

  1. System reads time from BIOS as local
  2. Displays it without conversions
  3. When changing time, writes local time back to BIOS

Example: If BIOS has 15:00, Windows will show 15:00 (without timezone consideration).

  1. Boot into Linux → Linux reads time as UTC and adds offset
  2. Reboot into Windows → Windows reads the same time as local
  3. Result: Time in Windows is off by your timezone amount!

There are two approaches to solving this:

  1. Configure Linux to use local time (not recommended)
  2. Configure Windows to use UTC

We’ll use the second approach as it’s more technically correct.

Before executing the command, you need to determine whether you have a 32-bit or 64-bit version of Windows.

How to check architecture:

  1. Press Win + Pause/Break
  2. Or: Settings → System → About
  3. Find the “System type” line

Most likely, you have a 64-bit system (this is standard for modern computers).

Step 2: Execute Registry Configuration Command

Section titled “Step 2: Execute Registry Configuration Command”
  1. Open Command Prompt as administrator

  2. Depending on your system architecture, execute the corresponding command

Terminal window
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1
Terminal window
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

After executing the command, you should see the message:

The operation completed successfully.

Step 4: Disable Time Synchronization Service

Section titled “Step 4: Disable Time Synchronization Service”

To prevent Windows from trying to “fix” the time back, you need to disable the automatic synchronization service:

Terminal window
sc config w32time start= disabled

After execution, you’ll see:

[SC] ChangeServiceConfig SUCCESS

After completing all steps:

  • Time in Windows is always correct
  • Time in Linux is always correct
  • No need to manually adjust the clock
  • Problem solved forever

If for some reason you need to revert everything back:

Terminal window
Reg delete HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /f
Terminal window
sc config w32time start= auto

After this, restart your computer.