Force Windows 8 to use UTC when dealing with BIOS clock
The default Windows Time service will always write local time to the hardware clock on shutdown, regardless of what the registry says about the real time being in UTC. Outside of this caveat, Windows will treat the hardware time clock correctly, if the registry is set correctly. Try this:
- If the time is messed up from trying to get Windows to use UTC, boot into Windows, and set the time as it would be normally (correct timezone, no regedit, Windows Time service enabled, recently synced, etc)
- Do the regedit you mentioned already
- Sync the time
w32tm /config /update
- Disable Windows Time service
sc config w32time start= disabled
- Install a 3rd party NTP client
- Verify that it works with a reboot
RealTimeIsUniversal
registry key still works in Windows 8 and 10! The instructions to use this method are explained lot of times everywhere, for example in this answer.
I will replicate the answer here:
Win+S,
regedit
, Enter.Navigate to the key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
.Create new DWORD (32-bit) Value, name it
RealTimeIsUniversal
.Set its value to
1
.
After this is done, just reboot your machine. After it is up and running again, let Windows set time automatically (click on the current time in tray, Date and Time Settings
> Set Time Automatically
), this time it will not mess with it.
RealTimeIsUniversal is really buggy and not an officially recommended solution (maybe that's why they disabled it in Win8?) See IBM PC Real Time Clock should run in UT and a response from Raymond Chen here: Why does Windows keep your BIOS clock on local time?. As of date I don't think there's a proper solution for this.