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.
Understanding the Problem
Section titled “Understanding the Problem”How Time Works in Linux
Section titled “How Time Works in Linux”Linux uses UTC as hardware time by default:
- System reads time from BIOS as UTC
- Applies timezone offset
- Displays local time to user
Example: If BIOS has 12:00 UTC and you’re in UTC+3 timezone, Linux will show 15:00.
How Time Works in Windows
Section titled “How Time Works in Windows”Windows uses local time directly:
- System reads time from BIOS as local
- Displays it without conversions
- When changing time, writes local time back to BIOS
Example: If BIOS has 15:00, Windows will show 15:00 (without timezone consideration).
What Happens When Switching
Section titled “What Happens When Switching”- Boot into Linux → Linux reads time as UTC and adds offset
- Reboot into Windows → Windows reads the same time as local
- Result: Time in Windows is off by your timezone amount!
Solution
Section titled “Solution”There are two approaches to solving this:
- Configure Linux to use local time (not recommended)
- Configure Windows to use UTC
We’ll use the second approach as it’s more technically correct.
Step 1: Determine System Architecture
Section titled “Step 1: Determine System Architecture”Before executing the command, you need to determine whether you have a 32-bit or 64-bit version of Windows.
How to check architecture:
- Press Win + Pause/Break
- Or: Settings → System → About
- 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”-
Open Command Prompt as administrator
-
Depending on your system architecture, execute the corresponding command
For 64-bit systems (most common):
Section titled “For 64-bit systems (most common):”Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1For 32-bit systems (rarely encountered):
Section titled “For 32-bit systems (rarely encountered):”Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1After 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:
sc config w32time start= disabledAfter execution, you’ll see:
[SC] ChangeServiceConfig SUCCESSResult
Section titled “Result”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
Reverting Changes
Section titled “Reverting Changes”If for some reason you need to revert everything back:
Remove registry parameter:
Section titled “Remove registry parameter:”Reg delete HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /fEnable synchronization service:
Section titled “Enable synchronization service:”sc config w32time start= autoAfter this, restart your computer.