This guide will show you how to use the date command to set the date of your Linux machine and how to set the date by syncing it across the Internet.
We recently ran an article on the Linux “date” command. It’s a pretty cool command line tool that allows you to get your system’s date and time in various formats. What it also does is it allows you to set the machine’s date and time. Let’s look at a couple of ways to set the time and date on a Linux machine. First, we’ll look at how to do it using the “date” command, then I’ll briefly introduce you to the NTP server in Linux and show you how you can sync your machine’s clock to a clock running on the Internet.
First, a brief recap on what the “date” command can do for you:
# date
Mon Dec 22 22:35:58 IST 2008
Now if you want to change the machine’s date to 1:45 PM on Christmas day in the year 2008, here’s how you would do it:
# date -s “25 DEC 2008 13:45:00”
Thu Dec 25 13:45:02 IST 2008
This above command is pretty self-explanatory. But to make it clear, here’s the breakup. First comes the “date” command. Then you use the “-s” option, which stands for “set date”. After that you enter the date you want to set in the following order. “Date Month Year Hours:Minutes:Seconds”. After entering this hit the return key. The system should revert with the new date. Now you can enter the “date” command once again to make sure that the date is set right.
There are a number of other ways to do this same thing. As you might have read in my previous article about the “date” command, it is pretty versatile. You can do something similar as what we just tried above with a slightly different syntax:
#date +%Y%m%d -s “20081225”
This will set the system’s date to the 25th of December, 2008.
The other method I use to set my computer’s date is using the NTP server. NTP stands for Network Time Protocol. NTPd is a daemon that runs on most Linux machines. When configured correctly this daemon allows you to connect to a Time server over the network (your local network or the Internet) and synchronize the time. It’s very commonly used for production servers.
It’s pretty likely that your Linux machine is already equipped with NTP. If not, install it using your system’s preferred installation method.
Ubuntu users can use the following command:
# sudo apt-get install ntpdate
Fedora users can probably use this:
# yum install ntp
Once NTPd is installed on your computer open the file /etc/ntp.conf in your favorite text editor. In this file locate a line containing the “server” parameter. Set it to the following address:
server pool.ntp.org
Save the file and restart your NTP server.
# /etc/init.d/ntpd restart
You can now synchronize your machine to the time server you just configured:
# ntpdate pool.ntp.org
22 Dec 23:07:00 ntpdate[24328]: step time server 123.108.39.80 offset 172868.246157 sec
Now your machine will quickly talk to the time server you assigned it and get you the right time. This way you know for sure that the time on your machine is accurately set. It may be a good idea to run this command every once in a while to make sure you’re on time.
$ sudo date +%Y%m%d%T -s “20100118 10:05:00”
[sudo] password for nenopera:
2010011810:05:00
$ date
Mon Jan 18 10:05:03 EST 2010
I’m using Arch linux and the ntpd daemon is located in /etc/rc.d/ntpd, but I didn’t need to start it. I just used: # ntpdate pool.ntp.org and it worked. However if you have the ntpd server running the update won’t work.
and if you want to save the time after restart, you need to use this command
hwclock –systohc
For my Debian boxes I usually use the following after a Net Install:
mv /etc/localtime /etc/localtime.bak
ln -sf /usr/share/zoneinfo/America/Los_Anglese /etc/localtime
/etc/init.d/ntpd restart
date