Linux: set date through command line
date -s '2014-12-25 12:34:56'
Run that as root or under
sudo. Changing only one of the year/month/day is more of a challenge and will involve repeating bits of the current date. There are also GUI date tools built in to the major desktop environments, usually accessed through the clock.
To change only part of the time, you can use command substitution in the date string:
date -s "2014-12-25 $(date +%H:%M:%S)"
will change the date, but keep the time. See
man date for formatting details to construct other combinations: the individual components are
You can use
date to set the system date. The GNU implementation of
date (as found on most non-embedded Linux-based systems) accepts many different formats to set the time, here a few examples:
set only the year:
date -s 'next year' date -s 'last year'
set only the month:
date -s 'last month' date -s 'next month'
set only the day:
date -s 'next day' date -s 'tomorrow' date -s 'last day' date -s 'yesterday' date -s 'friday'
set all together:
date -s '2009-02-13 11:31:30' #that's a magical timestamp
Now the system time is set, but you may want to sync it with the hardware clock:
--show to print the hardware time:
You can set the hardware clock to the current system time:
Or the system time to the hardware clock
The command to to change the system date is
There are two ways to call the date command(in Linux):
date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
The easiest way is to use
date -s as it allows the use of simple relative dates
$ date -s yesterday; date date: cannot set date: Operation not permitted Sat Jan 5 07:21:07 EST 2019 Sun Jan 6 07:21:07 EST 2019
The date did not change because it was executed with a limited user
$. If you actually want the date changed, use root (
#) or sudo:
$ sudo date -s yesterday; date Sat Jan 5 07:21:07 EST 2019 Sat Jan 5 07:21:07 EST 2019
So, changing any part of a relative date is as easy as naming it:
$ date -s "5 years ago" Mon Jan 6 08:26:26 EST 2014 $ date -s "+6 months" Sat Jul 6 08:28:39 EDT 2019 $ date -s "+3 hours -13 minutes" Sun Jan 6 11:16:59 AST 2019
Absolute dates are a bit more complex as they need more detail:
$ date -s "2001-07-23 10:11:12"
Or, you can use the date command twice:
$ date -s "$(date +'%Y-%m-%d %H:%M:%S')"
replace any of the
% by a valid value and the date will be set (only as root).
$ date -s "$(date +'%Y-11-%d %H:%M:%S')" Wed Nov 6 08:37:15 EST 2019
The second date call form is used to directly change the system date.
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
date 11230812 # MMDDhhmm
Will set the date to the 23th of November at 08h and 12min.
BSD has a similar command but a different format ([[[[[cc]yy]mm]dd]HH]MM[.ss]).
date as a limited user to see what it would do (without changing anything):
$ date 11230812 date: cannot set date: Operation not permitted Sat Nov 23 08:12:00 EST 2019
Or, if you actually want to change the date, as root:
# date 11230812 # date Sat Nov 23 08:12:00 EST 2019
Note that services like NTP or chrony will be affected. And, if restarted will reset the date back to the real one.
Add a YY to set the year:
$ date 1123081222 date: cannot set date: Operation not permitted Wed Nov 23 08:12:00 EST 2022
Or a CCYY to set year and century:
$ date 112308121982 date: cannot set date: Operation not permitted Tue Nov 23 08:12:00 EST 1982