How to Sync Time with a Server on Raspberry Pi?


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 in general).

On a new installation, a Raspberry Pi uses timedatectl for time synchronization. Servers can be updated in the configuration file, located at /etc/systemd/timesyncd.conf. The NTP service can also be installed if needed.

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 hereIt’s a 30-days challenge from beginner to master, with step-by-step tutorials and many projects to practice along the way.

Introducing time synchronization

Get My Cheat Sheet!
Grab your free PDF file with all the commands you need to know on Raspberry Pi!

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 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 than that, but remembering this is already great).

Network Time Protocol (source: Wikipedia)

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.

If you need more details about the theory before going further, this video is pretty good:

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.

Time synchronization on Raspberry Pi: Timedatectl

What is Timedatectl on Raspberry Pi?

Raspberry Pi Bootcamp
Sale: 10% off today.
Take it to the next level.
I'm here to help you get started on Raspberry Pi.
Learn all the skills you need in the correct order.

Timedatectl is a tool to set up the date and time. The recent Raspberry Pi OS versions includes timedatectl by default.

The first command I’ll show you is how to check the current status:

timedatectl status

This should give you something like this:

timedatectl status

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).

Timedatectl commands

Before going further in the timedatectl configuration, I want to show you some useful commands you can use directly.

Are you a bit lost in the Linux command line? Check this article first, for the most important commands to remember, and a free downloadable cheat sheet so you can have the commands 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:

timedatectl list-timezones

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>

For example:

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'

For example:

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
Master your Raspberry Pi in 30 days
Sale: 10% off today.
Download the eBook.
Uncover the secrets of the Raspberry Pi in a 30 days challenge.
Learn useful Linux skills and practice multiples projects.

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.

Sync time with a server: the Timedatectl configuration file

Here is how to configure the time synchronization with a server by using timedatectl:

  • Open the configuration file:
    sudo nano /etc/systemd/timesyncd.conf

  • Comment out the line starting with FallbackNTP and replace default servers by your time servers (on Internet or from the local network).
  • For example:
    [Time]
    #NTP=
    FallbackNTP=0.us.pool.ntp.org 1.us.pool.ntp.org
  • Save and exit

A reboot might be necessary to update the configuration, but your date and time will now be synchronized with the servers defined in this configuration file.

NTP

NTP introduction

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.

NTP configuration

NTP installation

As I said, NTP is not available by default on Raspberry Pi OS.
You need to install it with apt:

sudo apt install ntp

NTP configuration

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 commands

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

ntpdate is an additional command you can install and use to force time synchronization.

Installation:

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
Master Python on Raspberry Pi
Sale: 10% off today.
Get the eBook.
Do more with your Raspberry Pi, learn the useful concepts and take the shortcuts.
You miss half of the fun of using a Raspberry Pi if you don’t know anything about Python.

You need to stop the NTP daemon before using ntpdate to free the port.

You’ll get something like this:

ntpdate set time

Video

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:

FAQ

In a nutshell

Timedatectl commands

CommandDescription
timedatectl statusShow the current configuration
timedatectl list-timezonesList the timezones you can use
sudo timedatectl set-timezone <zone>Set your current timezone
sudo timedatectl set-time <date-time>Set the date/time manually
sudo timedatectl set-ntp <true/false>Enable or disable time synchronization

NTP commands

CommandDescription
sudo apt install ntp ntpdateInstall NTP and ntpdate
service ntp status | start | stop | restartManage the NTP service
sudo ntpdate -q 0.us.pool.ntp.orgCheck the time delay compared to a server
sudo ntpdate 0.us.pool.ntp.orgChange the synchronization server (NTP service should be turned off)

Reminder: Remember that all my Patreon supporters get access to this website without ads, early access to my videos and much more. You can become part of this community for as little as $3 per month & get all the benefits immediately.

Conclusion

Get My Cheat Sheet!
Grab your free PDF file with all the commands you need to know on Raspberry Pi!

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:

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 multiple projects with step-by-step guides.
Download the e-book.

VIP Community
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.

Need help building something with Python?
Create, understand and improve any Python script for your Raspberry Pi.
Learn the essentials, step-by-step, without losing time understanding useless concepts.
Get the e-book now.

You can also find all my recommendations for tools and hardware on this page.


This tutorial doesn't work anymore? Report the issue here, so that I can update it!

0 0 votes
Article Rating

Patrick Fromaget

I'm the lead author and owner of RaspberryTips.com. My goal is to help you with your Raspberry Pi problems using detailed guides and tutorials. In real life, I'm a Linux system administrator with a web developer experience.

Subscribe
Notify of
guest
17 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Jacksobn
Jacksobn
2 years ago

Thanks for the information, but seems like timedatectl is not independent as I thought…it is still depend on ntp to carry out its operations.

RayD
2 years ago

Good to know.

I don’t know why, but I had to reboot after executing `sudo timedatectl set-ntp true` in order for the change to show up in `timedatectl status`. Not a bug or a complaint, just a datapoint.

Jacques Gandelman Lerner
Jacques Gandelman Lerner
2 years ago

I found that there’s a typo on this line:
sudo timedatectl set-time ‘A:M:J HH:mm:ss’ That should read
sudo timedatectl set-time ‘A/M/J HH:mm:ss’
Same for the next line/ instead of :
I also found that there are many other issues on this article if you’re using Raspbian Buster like ‘ntp’ is no more installed even if you want as there are inconsistencies not met .

Peter
Peter
2 years ago

It is not necessary to reboot the pi after changing the timesyncd.conf. Just restart the service with the command:

sudo systemctl restart systemd-timesyncd.service

Afterwards you can check with “timedatectl show-timesync” if timesyncd uses the NTP servers, you have configured.

I also use the line NTP for configuring my time servers, the FallbackNTP is for fallback. 🙂
[Time]
NTP=my-timeserver01.local my-timeserver02.local
FallbackNTP=0.us.pool.ntp.org 1.us.pool.ntp.org

Eric
Eric
2 years ago

I have several ESP8266 projects connected via wifi and all need to be synced to have the correct time. For testing I did not want all of them to go out and sync with an ntp server on the internet.

I installed NTP because this enabled the Rpi to serve as an NTS server for local clients on my network. I.e. it then syncs itself with an NTP server on the internet AND it responds to NTP requests locally. At least this was suggested by some posts I found.

I understand that timedatectl is clever enough to detect that ntp is installed so you don’t have to stop this service, as some posts elsewhere suggested.

What I wonder: is the Rpi responding to NTP requests on the local network out of the box, thus without NTP installed? Anyone tested that?

Ayo
Ayo
1 year ago

Hi and thanks for the information, was usefully.

Vit
Vit
1 year ago

hi I installed raspbery pi 3 on ubuntu 18.04
I can’t automatically synchronize the time every time I reboot
the ntp is not used , i think because the time is long time ago,so it can’t work

Vit

Tim Bratton
Tim Bratton
1 year ago

I have a R-Pi 4B, Linux 5.4.51 (updated 2020-10-14).
The sudo timedatect set-time ‘FMT’ commands do not seem to be recognized. OS says “Failed to recognize arguments.” What do I need to do to make this work?

behzad
behzad
1 year ago

The correct format for setting the date and time is:

sudo timedatectl set-time ‘Y-M-D hh:mm:ss’

Recent Posts

Master your Raspberry Pi - 10% off