You boot Fedora and the clock jumps six hours
You switch from Windows to Fedora and the system time is wrong. You reboot into Windows and the time is wrong in the opposite direction. Every time you change operating systems, the clock shifts by your time zone offset. The BIOS shows the correct time. The battery is fine. The issue is not a broken hardware clock or a misconfigured NTP server. The two operating systems disagree on what the hardware clock represents.
What's actually happening
The motherboard contains a Real-Time Clock (RTC) chip powered by a coin cell battery. This chip keeps ticking even when the laptop is off. When the system boots, the operating system reads the RTC and sets the system clock. The disagreement comes from how each OS interprets that value.
Windows reads the RTC and assumes the value is in your local time zone. Fedora reads the RTC and assumes the value is in Coordinated Universal Time (UTC). When you shut down, each OS writes its interpretation back to the RTC. Windows writes local time. Fedora writes UTC. The next OS to boot reads a value it does not understand and applies the wrong offset. The result is a time jump equal to your time zone offset every time you switch.
Think of the RTC as a watch that does not know about time zones. Windows assumes the watch shows your local time. Fedora assumes the watch shows UTC. If the watch is set to UTC, Windows adds your offset and gets the wrong time. If the watch is set to local time, Fedora subtracts your offset and gets the wrong time.
Linux defaults to UTC because it handles Daylight Saving Time more robustly. When the RTC stores local time, the kernel must apply DST rules to calculate the system clock. This requires the OS to know the current DST status of the hardware clock. If the RTC stores UTC, the kernel simply adds the time zone offset. The offset changes automatically when DST starts or ends. This approach eliminates ambiguity and works correctly across time zones. Windows historically chose local time for compatibility with older BIOS implementations and user expectations.
Run timedatectl to check the current state. If the output shows RTC in local TZ: no, Fedora is correctly using UTC. If it shows yes, Fedora has been forced to use local time, which is likely the source of instability.
Fix Windows to use UTC
The most robust solution is to configure Windows to treat the hardware clock as UTC. This aligns Windows with the Linux standard and avoids breaking NTP synchronization or causing issues when traveling across time zones. Fedora requires no configuration changes. You only need to modify the Windows registry.
Boot into Windows and open PowerShell as Administrator. Run the following command to create the registry key that forces Windows to interpret the RTC as UTC.
# Create the registry key that forces Windows to interpret the RTC as UTC
# /t REG_DWORD defines the value type as a 32-bit integer
# /d 1 sets the value to true
# /f forces the update without prompting for confirmation
reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1 /f
This command adds a DWORD value named RealTimeIsUniversal under the TimeZoneInformation key. When this value is set to 1, Windows reads and writes the RTC as UTC. The change takes effect immediately for the current session and persists across reboots.
Reboot into Fedora. The time should now remain synchronized across both operating systems. If the time jumps, verify the registry key was created correctly in Windows.
Reboot before you debug. Half the time the symptom is gone after the registry update applies.
Force Fedora to use local time (alternative)
You can force Fedora to use local time for the hardware clock instead. This matches Windows behavior but introduces risks. NTP daemons like chronyd may struggle to synchronize correctly when the system clock and RTC use different bases. Traveling across time zones can cause the system time to jump unexpectedly because the OS applies the zone offset twice. Use this only if you cannot modify the Windows registry.
Run the following command in Fedora to switch the RTC mode.
# Tell systemd to treat the hardware clock as local time
# --adjust-system-clock shifts the current system time to match the new RTC interpretation
# This prevents the clock from jumping immediately after the change
sudo timedatectl set-local-rtc 1 --adjust-system-clock
The --adjust-system-clock flag is essential. Without it, changing the RTC interpretation causes the system clock to jump immediately because the kernel recalculates the time based on the new RTC mode. The flag shifts the system clock to maintain continuity.
This approach is less reliable for dual-boot systems. Windows updates can sometimes revert registry settings, but they rarely touch the RTC mode. Fedora's UTC mode is the upstream default for a reason. Stick to the Windows registry fix unless you have a hard constraint against touching Windows settings.
Stick to the Windows registry fix unless you have a hard constraint against touching Windows settings.
Verify the fix
After applying the fix, verify the configuration in Fedora. The timedatectl command shows the current clock state and synchronization status.
# Display the current time, timezone, and RTC settings
# Look for "RTC in local TZ: no" to confirm UTC mode
# "System clock synchronized: yes" confirms NTP is working
timedatectl
Check the output carefully. RTC in local TZ: no confirms Fedora is using UTC. System clock synchronized: yes confirms the NTP daemon is active and correcting drift. If synchronization is no, check the NTP service status.
Fedora ships with chronyd as the default NTP daemon. It is more robust than systemd-timesyncd for desktop use and handles clock adjustments smoothly. chronyd can correct large time jumps without breaking services that depend on monotonic time.
# Check the status of the NTP service
# Fedora uses chronyd by default for time synchronization
# Ensure the service is active and not reporting errors
systemctl status chronyd
If chronyd is inactive, start and enable it.
# Start the chronyd service immediately
# Enable it to start automatically on boot
sudo systemctl enable --now chronyd
Run timedatectl before you reboot. If the output shows UTC mode and synchronization is active, the fix is solid.
Common pitfalls and error patterns
Windows Fast Startup can interfere with dual-boot stability. When Fast Startup is enabled, Windows performs a hibernation instead of a full shutdown. This can leave the file system in a state that Fedora refuses to mount, or cause the RTC to behave unpredictably. Disable Fast Startup in Windows power settings if you experience mounting issues or time drift after sleep.
If you attempt to fix this by mounting the Windows partition from Fedora and editing the registry, you risk data corruption and SELinux denials. Fedora detects that Windows is in a hibernated state and mounts the partition read-only to prevent corruption. Editing the registry from Linux requires Wine or complex workarounds that are error-prone. Always perform the registry fix from within Windows.
SELinux protects the system by enforcing strict access controls. If you attempt to mount a Windows partition and encounter permission errors, check journalctl -t setroubleshoot. The logs provide a one-line summary of the denial and often suggest the correct command to resolve it. Do not disable SELinux to fix time issues. The problem is almost always a configuration mismatch, not a security policy.
If the time drifts slowly over days, the issue is NTP synchronization, not the RTC. Ensure chronyd is running and the firewall allows NTP traffic on UDP port 123. Fedora's default firewall configuration usually allows this, but custom rules can block it.
# List all active firewall zones and services
# Verify that ntp is allowed if you are using chronyd
# Fedora typically allows ntp by default in the public zone
firewall-cmd --list-all
If NTP is blocked, add the service and reload the firewall.
# Allow NTP traffic through the firewall
# --permanent makes the change persist across reboots
sudo firewall-cmd --add-service=ntp --permanent
# Reload the firewall to apply the new rule
sudo firewall-cmd --reload
Check journalctl -xeu chronyd if the time drifts. The logs will tell you if the daemon is being blocked or failing to reach a server.
Check journalctl -xeu chronyd if the time drifts. The logs will tell you if the daemon is being blocked or failing to reach a server.
When to use this vs alternatives
Use the Windows registry fix when you want a stable dual-boot setup that handles time zones and NTP correctly. Use timedatectl set-local-rtc 1 when you cannot access Windows or lack administrative rights to modify the registry. Use chronyd configuration tweaks when the time drifts slowly over days rather than jumping on boot. Disable Windows Fast Startup when Fedora refuses to mount the Windows partition or the time jumps after Windows sleep.