Fix Windows and Linux Showing Different Times When Dual Booting

If your system dual boots both Windows and Linux, you might notice that it’s impossible to get the system clocks to sync. No matter how you change the clock in one OS, it doesn’t fix the problem with the other OS. This is because of a disagreement about time-keeping methodology between Windows and Unix-based operating systems. Fortunately, there’s a relatively easy fix for that.

Your computer stores the current time in a clock on your motherboard. This allows the computer to keep track of time even when turned off. To account for time zones, different operating systems use different methods. Windows assumes the local time is stored in the motherboard, so it doesn’t apply any kind of time zone offset. Linux, on the other hand, will interpret the time on the motherboard as UTC (a.k.a. Greenwich Mean Time) and apply a timezone offset to display local time.

Both of these systems work perfectly fine independently. The problem occurs when you dual boot a system, running Windows and Linux off the same motherboard. When the operating systems are forced to share a time store, the clocks won’t sync.

There are two different ways we can fix this problem: we can change how Linux interprets the stored time or do the same to Windows.

The most reliable way to make Linux and Windows agree on the time is to change Linux’s time keeping methodology. While this isn’t explicitly supported, it’s slightly more reliable than doing the same in Windows. It works on any flavor of Linux using systemd, which includes Ubuntu, Fedora, Red Hat, Debian, and Mint. Changing the Windows time typically works fine too, but it can sometimes lead to instabilities in third-party software that expects the stored time to be local time.

1. Open Terminal and run the following command:

windows-linux-dual-boot-time-0

This will tell the system to interpret your motherboard’s stored time as local time. Linux will no longer apply time zone adjustments to the time stored on the motherboard. As a result, your clocks will sync.

If you ever need to reverse the command, change the 1 to a 0:

You can also change the way that Windows views system time. This tweak will cause Windows to interpret the time stored on the motherboard as UTC, which Linux can then interpret as the correct time zone. While this generally works well, some applications rely on motherboard time being local time. As a result, hard-to-track bugs can sometimes appear. That makes this option slightly less desirable than the first.

1. Disable “Set time automatically” under “Time & Language” in the Settings application. This will prevent Windows from reverting the changes we’re about to make.

windows-linux-dual-boot-time-1

2. Open Registry Editor by typing regedit in the Start Menu.

windows-linux-dual-boot-time-2

3. Find the following registry key in the left pane of the registry editor. To get there quickly, paste the location into the registry editor’s address bar:

windows-linux-dual-boot-time-3

4. Right-click on the “TimeZoneInformation” key in the left pane and chose “New -> DWORD (32-bit) Value” from the context menu.

windows-linux-dual-boot-time-4

5. Name your new value “RealTimeIsUniversal.”

windows-linux-dual-boot-time-5

6. Double-click on the value you just created, set its value to “1,” and click “OK.”

windows-linux-dual-boot-time-6

The safest way to sync your system clocks on a dual-booting system is to adjust how Linux interprets time. If that doesn’t work for you (or if you’re using macOS instead of Linux), you can also edit the Windows registry to change the way Windows understands motherboard time.

7 comments

  1. What if your dual-boot system requires Linux to use UTC/GMT, due the system network to which it connects, and requires Windows to use local time, due it connecting to the internet via a separate physical intranet connection? i.e. NIC #2 enabled and NIC #1 disabled in Linux, and NIC #2 disabled and NIC #1 enabled in Windows.
    What would be safest way to sync the clocks to their separate networks without having to manually change the clock when booting to the opposing OS?

    • Maybe add a second clock to sync against. Make a mod. I use to see clocks that I could add to simple systems. You could write scripts to sync against it accordingly. One for linux the other for windows. Or if you can get network before a clock sync you could use ntp to sync against.

  2. Being that I primarily use linux might have to do with my bias but UTC time is the correct time to have on the BIOS. It allows for better uniformity. Programs that have issues with this are the problem and should be reported as bugs in those programs. Why Microsoft’s default setting is still local time is beyond me.

  3. Why can’t Linux just run it like Windows which would make more sense because so many users duel boot Linux and Windows. This goes back awhile now and everyone says its so simple to fix, so why isn’t it fixed by now instead of users having to fiddle with this stuff?

    • We might as easily ask why Windows doesn’t switch to the method used by Unix systems.

      I would not characterize this as a flaw or an error. From an abstract perspective, it’s two non-compatible software suites approaching the same problem in different ways and causing an inconsistency for the user. It’s well outside the bounds of what any operating system needs to support.

Leave a Comment

Yeah! You've decided to leave a comment. That's fantastic! Check out our comment policy here. Let's have a personal and meaningful conversation.

Sponsored Stories