Do you have issues with the time configuration on Raspberry Pi?
Or maybe you want to sync the time with another server?
In this post, I’ll teach you all you need to know about time synchronization on Raspberry Pi (and on Linux).
Raspberry Pi OS already has time synchronization enabled by default. The timedatectl command can be used to display the current configuration. The same command can also set a different time zone or server to sync with.
I’ll explain how the time synchronization works on Linux and how to configure it the way you want to.
I’ll share the two ways of doing this on a Raspberry Pi:
– Timedatectl: included out of the box, pretty easy to configure.
– NTP: classic way to do this on Linux, for more compatibility with other systems.
And finally, I’ll give you other useful commands for date and time on Raspberry Pi.
By the way, if you are really interested in improving your skills on Raspberry Pi, I highly recommend to check out my e-book here. It’s a 30-days challenge from beginner to master, with step-by-step tutorials and many projects to practice along the way.
About time synchronization
Before going further with technical information and commands, I want to introduce how the time synchronization works on Linux, on Raspberry Pi and on most of the modern devices.
On a network, it’s crucial to have the same time on all of the computers.
For example, you can’t connect to Active Directory or Samba shares if your computer is even 5 minutes late (check my tutorial on how to join an Active Directory with a Raspberry Pi).
So, we need to set up time-synchronization systems on the network.
The NTP protocol has this role.
Basically, you configure your computer to ask the time to another computer, and to use the answer to set its current time (it’s a little more complex that that, but remembering this is ok),
Typically, you have a master server on each network which gets the current time from an Internet server.
And then all computers synchronize with this master.
In this post I’ll show you how to do this configuration using timedatectl or NTP directly.
By the way, if you are just looking to set the date and time manually on your Raspberry Pi, there are easier ways to do this. You don’t necessarily need to change anything about the time synchronization.
The last Raspberry Pi OS version (lite or desktop) includes timedatectl by default.
It’s a tool to manage the date and time on the Raspberry Pi.
The first command I’ll teach you is how to check the current status:
This should give you something like this:
So you’ll get:
- The local time.
- The universal time (same thing by default).
- The RTC time if configured (module not included on Raspberry Pi).
- The current time zone (GMT by default).
- The current network time synchronization status.
As you can see, my Raspberry Pi is already time synchronized by default (except the time zone).
Before going further in the timedatectl configuration, I want to show you some useful commands you can use directly.
A bit lost in the Linux command line? Check this article first, which will give you the most important ones to remember with a free cheat sheet you can download to have all of them at your fingertips.
List time zones
If you need to change the default time zone, you first need to know all available values.
To do this, use this command:
As the list is big, you can filter it with the grep command:
timedatectl list-timezones | grep America timedatectl list-timezones | grep Sydney
Note your local time zone and use it with the next command.
Set time zone
To set the current time zone, use this command:
sudo timedatectl set-timezone <time zone>
sudo timedatectl set-timezone America/New_York sudo timedatectl set-timezone Europe/Paris sudo timedatectl set-timezone Australia/Sydney
Use the timedatectl status again to check that the current time is correct.
You can also change the time zone in raspi-config > Localization options > Change time zone.
Set the time manually
You can also set the time manually with timedatectl.
Here is how:
sudo timedatectl set-time 'Y:M:D HH:mm:ss' sudo timedatectl set-time 'Y:M:D' sudo timedatectl set-time 'HH:mm:ss'
sudo timedatectl set-time '12:00:00'
But to do this, you need to disable the time synchronization (see next paragraph).
Enable or disable the time synchronization
If you want to disable or enable the time synchronization, use these commands:
sudo timedatectl set-ntp false sudo timedatectl set-ntp true
Note: you may need to reboot the Raspberry Pi to apply this change (see comments).
That’s it, you now know the basic timedatectl commands.
The last thing you need to know about timedatectl is how to change the synchronization server.
You can do this in the configuration file:
- Open the file:
sudo nano /etc/systemd/timesyncd.conf
- Comment out the last line and replace default servers by the servers you want to use (on Internet or from the local network).
- For example:
The other way to do time synchronization on Linux is to use NTP.
Even if Debian and Ubuntu are replacing it by timedatectl on new versions, it’s still a common software on Linux systems.
I’m not sure to understand all the differences between both and why they are moving to timedatectl.
But in my mind I think that timedatectl is for clients, easy to use and configure out of the box.
And NTP is probably better on a server, to sync time with it and have more configuration options.
As I said, NTP is not available by default on Raspberry Pi OS.
You need to install it with apt:
sudo apt install ntp
The configuration file for NTP is available here: /etc/ntpd.conf
You can edit it to set a new server for time synchronization (lines beginning with “pool”).
If you want to use your Raspberry Pi as an NTP server, it’s also in this file that you can change the server configuration (restrict access, broadcast time, …).
NTP has less commands than timedatectl as everything is in the configuration file.
But you can use this one to manage the ntp server daemon:
service ntp status | start | stop | restart
ntpdate is an additional command you can install and use to force time synchronization.
sudo apt install ntpdate
Check your current time delay compared to a server:
sudo ntpdate -q 0.us.pool.ntp.org
In my case I got a 0.005s offset. It confirms that the NTP server is working fine.
Fix the delay now:
The NTP daemon will fix the delay step by step.
But if you want to fix it now, you can use:
sudo service ntp stop sudo ntpdate 0.us.pool.ntp.org sudo service ntp start
You need to stop the NTP daemon before using ntpdate to free the port.
You’ll get something like this:
Here is a video to show you exactly the step-by-step process to do this:
You can also subscribe to see all the news videos in your YouTube Feed:
You now know how to change the date and time on your Raspberry Pi and how to synchronize the clock from several Linux computers on the same network.
This may seem not so useful at home or in a small network, but it’s an essential component in big networks.
More tutorials like this one on RaspberryTips:
- 27 tips for Raspberry Pi beginners
- Create a new user on Raspberry Pi
- Install Nagios and monitor the time of your devices!
Raspberry Pi Resources
Not sure where to start?
Understand everything about the Raspberry Pi, stop searching for help all the time and finally enjoy completing your projects.
Watch the Raspberry Pi Bootcamp course now
Master your Raspberry Pi in 30 days
Don’t want the basic stuff only? If you are looking for the best tips to become an expert on Raspberry Pi, this book is for you. Learn useful Linux skills and practice multiples projects with step-by-step guides.
Download the e-book
If you just want to hang out with me and show your support, you can also join the Patreon community. I share behind-the-scenes content there and give you early access to my content. You’ll also get a shoutout when you join.
More details here
You can also find all my recommendations for tools and hardware on this page.