Your clock is wrong, and you need to fix it
You just landed in a hotel in Tokyo, or you dual-boot Windows and Linux, and your system clock is drifting. Maybe you upgraded Fedora and noticed the time is off by an hour, or your logs show timestamps from yesterday. The clock is wrong, and you need to fix it without breaking anything. A wrong clock breaks TLS certificates, desynchronizes logs, and causes cron jobs to fire at the wrong time. Fix the time before you debug SSL errors or schedule tasks.
What controls time on Fedora
Fedora separates the system clock from the hardware clock. The system clock runs in software and can be adjusted instantly. The hardware clock, or RTC, sits on the motherboard and keeps ticking even when the power is off. Linux prefers the RTC to store UTC. Windows prefers local time. This mismatch causes the classic dual-boot time drift.
timedatectl bridges these layers. It talks to systemd to set the system time and updates the RTC. It also controls chronyd, the NTP client that keeps your clock synced with the internet. Fedora uses chronyd by default instead of the older ntpd. chronyd syncs faster, handles clock drift better in virtual machines, and works well even with intermittent network connections.
Run timedatectl to see the full picture. The output shows Local time, Universal time, RTC time, and NTP synchronized status. If NTP synchronized says no, your system is drifting. Check the next section.
timedatectl
# Displays the current time state.
# Look for "NTP synchronized: yes" to confirm automatic sync is working.
# If this says "no", chronyd might be stopped or unable to reach a server.
# The "RTC in local TZ" line tells you how the hardware clock is configured.
Read the NTP synchronized line first. If it says no, fix sync before changing the timezone.
Change the timezone
The timezone affects how the system displays time and how logs are written. It does not change the underlying UTC timestamp. Changing the timezone is safe and takes effect immediately.
List available timezones to find the correct identifier. The list is long. Pipe it through grep to narrow it down.
timedatectl list-timezones | grep America
# Lists timezones matching the pattern.
# Use this to find the exact string for your region.
# The output is case-sensitive. Copy the full string.
Set the timezone with sudo. The change applies to the system clock and updates the RTC if local-rtc mode is enabled.
sudo timedatectl set-timezone America/New_York
# Changes the timezone immediately.
# Logs and new processes will use this timezone.
# Existing processes keep their old timezone until restarted.
Restart your session. Some apps cache the timezone on startup and won't update until you log out.
NTP and automatic synchronization
Automatic synchronization is the standard for any system connected to the network. chronyd runs in the background and adjusts the clock gradually to avoid jumps that break applications.
Enable NTP through timedatectl. This starts chronyd and ensures it runs on boot.
sudo timedatectl set-ntp true
# Tells systemd to start chronyd and keep it running.
# chronyd will contact the pool servers defined in /etc/chrony.conf.
# This command fails if chronyd is not installed, which is rare on default Fedora.
Verify the sync is actually working. timedatectl shows the status, but chronyc shows the details.
chronyc tracking
# Shows detailed sync info from chronyd.
# Look for "Reference ID" and "System time" offset.
# This proves chronyd is actually talking to a server, not just running.
# A large offset indicates the clock is still adjusting or the source is bad.
Run chronyc tracking to verify sync. A running daemon with no reference is just guessing.
Dual-boot and the hardware clock
If you dual-boot with Windows, the time jumps when you switch operating systems. Windows writes the local time to the RTC. Linux reads the RTC as UTC and converts it, resulting in a time shift equal to your timezone offset.
Fix this by telling Linux to treat the RTC as local time. This aligns Linux with Windows behavior. Only do this if you dual-boot. Pure Linux systems should stay in UTC.
sudo timedatectl set-local-rtc 1 --adjust-system-clock
# Forces the hardware clock to store local time instead of UTC.
# The --adjust-system-clock flag updates the system time to match immediately.
# Only do this if you dual-boot with Windows. Pure Linux systems should stay in UTC.
Only touch the RTC mode if you dual-boot. Pure Linux systems run best with UTC.
Manual time and isolated systems
Manual time setting is rare. Use it only for air-gapped systems or when NTP is unavailable. You must disable NTP first, or the command will fail.
sudo timedatectl set-ntp false
# Disables automatic time sync.
# Required before setting time manually.
# Re-enable this immediately after setting the time, or your clock will drift.
Set the time with a specific timestamp. The format is ISO 8601.
sudo timedatectl set-time '2026-04-18 14:30:00'
# Sets the system clock to the exact time provided.
# This command only works when NTP is disabled.
# The time is applied instantly. Processes may see a jump.
Re-enable NTP immediately. Manual time is a temporary fix for air-gapped systems, not a long-term strategy.
Troubleshooting NTP failures
If NTP synchronization fails, check the service status and the configuration. Corporate firewalls often block NTP traffic. Virtual machines may lack access to the host clock source.
Check the journal for errors. chronyd logs its activity there.
journalctl -xeu chronyd
# Shows logs for the chronyd service with explanatory text.
# Look for "Source lost" or "Network is unreachable".
# The -xe flags add context and jump to the end of the log.
If the default pool is blocked, edit the configuration. Fedora stores the config in /etc/chrony.conf. Never edit files in /usr/lib/. Those ship with the package and get overwritten on updates.
# /etc/chrony.conf excerpt
pool 2.fedora.pool.ntp.org iburst
# iburst speeds up initial synchronization by sending a burst of packets.
# If your network blocks the default pool, replace this with your internal NTP server.
# Add "server 192.168.1.10 iburst" for a local NTP source.
Restart the service after editing the config.
sudo systemctl restart chronyd
# Reloads chronyd with the new configuration.
# The service will attempt to sync with the new sources immediately.
# Check chronyc tracking again to confirm the change took effect.
Timezone rules change when countries update daylight saving policies. Update the tzdata package to get the latest rules.
sudo dnf upgrade --refresh tzdata
# Updates the timezone database.
# Run this if a country changes DST rules and your system hasn't updated yet.
# The --refresh flag forces dnf to check for new metadata.
Check the firewall. NTP uses UDP port 123, and blocked ports look like a broken clock.
Decision matrix
Use timedatectl when you need to change the timezone or toggle NTP from the command line. Use chronyc tracking when you need to verify NTP is actually syncing and see the offset. Use set-local-rtc when you dual-boot with Windows and the time jumps between reboots. Use the GNOME Settings app when you prefer a graphical interface and don't need to script the change. Use hwclock --show when you suspect the RTC battery is failing and need to read the hardware clock directly.
Update tzdata after a major release. DST rules change, and old databases cause timestamp errors.