Get the time zone wrong on a server and every log timestamp, cron job and certificate check quietly drifts with it, which is why timedatectl exists. It inspects the clock, changes the time zone, checks network synchronisation and controls what happens to the hardware clock. The examples use timedatectl from systemd 255.4, installed here as Ubuntu package version 255.4-1ubuntu8.17.
Allow about ten minutes for a read-only check, or fifteen minutes if you need to change a setting. You need a shell and a systemd host. The inspection commands are ordinary user commands. Changes to the system clock, time zone, RTC mode or NTP service normally require authentication, so the examples use sudo.
Safety boundary: Changing time can break logs, certificates, scheduled jobs and distributed systems. Record the current state before changing it. Do not use a guessed time zone or switch the RTC to local time just to make one display look right.
Start with the human-readable status view. With no command, status is implied:
$ timedatectl --no-pager status
Local time: Mon 2026-09-28 09:23:27 BST
Universal time: Mon 2026-09-28 08:23:27 UTC
RTC time: Mon 2026-09-28 08:23:27
Time zone: Europe/London (BST, +0100)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
The exact date, server and time zone will differ. The useful fields are the time zone, whether the system clock is synchronised, whether an NTP service is active and whether the RTC is kept in local time. Save the relevant values before a change:
$ timedatectl --no-pager show --property=Timezone --property=NTPSynchronized --property=NTP --property=LocalRTC
Timezone=Europe/London
LocalRTC=no
NTP=yes
NTPSynchronized=yes
Checkpoint: Keep the old Timezone value as ORIGINAL_ZONE if you are about to change it. The output from show is intended for scripts; use status when a person needs the formatted overview.
Do not guess the spelling. Ask the installed system for its available zone names, then select one exact entry:
$ timedatectl list-timezones | grep -E '^(Europe/London|UTC)$'
Europe/London
UTC
This list is one time zone per line. It comes from the host, so a zone present on one machine may not be available on another. The command is read-only and does not need elevated privileges.
Once you have checked the intended value, apply it:
$ sudo timedatectl set-timezone Europe/London
This changes the /etc/localtime symlink. It changes how local time is displayed and interpreted; it does not set the system clock to a new instant. Confirm the result:
$ timedatectl --no-pager status
Time zone: Europe/London (BST, +0100)
If the result is wrong, restore the value you recorded rather than inventing a reversal:
$ sudo timedatectl set-timezone ORIGINAL_ZONE
Replace ORIGINAL_ZONE with the actual value, such as UTC. There is no useful universal undo command because the previous zone is host-specific.
The top-level status tells you whether the system considers the clock synchronised. On a host using systemd-timesyncd, inspect the protocol details with:
$ timedatectl --no-pager timesync-status
Server: 2a01:4f8:0:a112::2:2 (ntp2.hetzner.com)
Poll interval: 34min 8s (min: 32s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 2
Offset: -176us
Delay: 523us
Server addresses, offsets and poll intervals vary. A successful command only means that status was available; judge synchronisation from the fields and from System clock synchronized, not from a copied example.
For a machine-parsable view, use show-timesync. Empty properties are hidden unless you add --all, and --property=NAME limits the output:
$ timedatectl --no-pager show-timesync --property=ServerName --property=PollIntervalUSec
ServerName=ntp2.hetzner.com
PollIntervalUSec=2048000000
These timesync commands describe systemd-timesyncd specifically. If another NTP implementation manages the host, its service and logs are the better place to investigate.
set-ntp true enables and starts the first available network synchronisation service. set-ntp false disables and stops the known network synchronisation services:
$ sudo timedatectl set-ntp true
$ timedatectl --no-pager show --property=NTP --property=NTPSynchronized
NTP=yes
NTPSynchronized=yes
Do not treat NTP=yes as proof that a fresh sync has already completed. It indicates that network synchronisation is enabled. Check NTPSynchronized=yes or inspect timesync-status before relying on the clock.
Warning: Disabling NTP is a service-disrupting change for systems that depend on accurate time. If you temporarily disabled it, the recovery command is:
$ sudo timedatectl set-ntp true
$ timedatectl --no-pager status
If enabling NTP fails, the command may have no suitable synchronisation service to start. Check the host's service installation and configuration instead of repeatedly retrying with sudo.
Linux works best when the hardware real-time clock is maintained in UTC. Check the final status line:
$ timedatectl --no-pager show --property=LocalRTC
LocalRTC=no
LocalRTC=no means UTC mode. The alternative, LocalRTC=yes, keeps the RTC in local time. The manpage warns that local RTC mode is not fully supported and can cause problems when time zones or daylight saving rules change. Keep UTC mode unless a specific dual-boot or hardware requirement has been assessed.
If you have a documented reason to change the mode, understand the side effect first. set-local-rtc also synchronises the RTC from the system clock unless --adjust-system-clock is supplied:
$ sudo timedatectl set-local-rtc 0
$ timedatectl --no-pager show --property=LocalRTC
LocalRTC=no
That command restores the recommended UTC mode. Do not use set-local-rtc 1 as a display fix. It changes the third line of /etc/adjtime and changes how the system interprets the hardware clock.
Manual clock setting is a last resort. It updates the system clock and the RTC. First stop relying on an NTP answer that may immediately correct your manual value, then set an unambiguous time:
$ sudo timedatectl set-ntp false
$ sudo timedatectl set-time '2026-09-28 09:30:00'
$ timedatectl --no-pager status
Use a quoted value in the documented YYYY-MM-DD HH:MM:SS form. Check logs and applications after the change. Restore network synchronisation when the manual correction is finished:
$ sudo timedatectl set-ntp true
$ timedatectl --no-pager status
Do not perform this step on a production host during a busy period without coordinating the effect on services. If the host is already synchronised, there is normally no reason to set the clock manually.
list-timezones, not from memory.status is used for people and show for scripts.