Linux: set date through command line
You can use e.g. date —set=’-2 years’ to set the clock back two years, leaving all other elements identical. You can change month and day of month the same way. I haven’t checked what happens if that calculation results in a datetime that doesn’t actually exist, e.g. during a DST switchover, but the behaviour ought to be identical to the usual «set both date and time to concrete values» behaviour.
Assuming you’re trying to set the date to the current time, you could do sudo ntpd -gq to have the system update automatically using the ntp service.
7 Answers 7
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:
will change the date, but keep the time. See man date for formatting details to construct other combinations: the individual components are %Y , %m , %d , %H , %M , and %S .
There’s no option to do that. You can use date -s «2014-12-25 $(date +%H:%M:%S)» to change the date and reuse the current time, though.
@MichaelHomer @SHW it is possible to change only the date with a command like date -s 2018-01-01 . Someone shared this in an answer also: superuser.com/questions/870068/…
System time
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:
date -s 'next year' date -s 'last year'
date -s 'last month' date -s 'next month'
date -s 'next day' date -s 'tomorrow' date -s 'last day' date -s 'yesterday' date -s 'friday'
date -s '2009-02-13 11:31:30' #that's a magical timestamp
Hardware time
Now the system time is set, but you may want to sync it with the hardware clock:
Use —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
Bonus points for illustrating the non-obvious ways you can set the date with examples and for pointing out the difference between the «system time» and the «hardware clock». Very helpful answer!
I think you confused hctosys and systohc. hctosys means «Set system time from hardware clock» and systohc means «Set hardware clock from system time».
The command to to change the system date is date .
There are two ways to call the date command(in Linux):
date [OPTION]. [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Easy
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:
Or, you can use the date command twice:
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
direct
The second date call form is used to directly change the system date.
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Will set the date to the 23th of November at 08h and 12min.
Try 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.
$ 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
Настройка даты и времени в Linux – команда date
Как это часто бывает, всё самое важное скрывается за самыми простыми вещами. Так и в случае с установкой/настройкой даты и времени в системе. Некорректные значения этих параметров запросто ломают логику работы многих приложений, особенно это касается тех систем, где на этом построены целые сервисы, такие как интернет-магазины, SCADA-системы на производстве и т. д. Поэтому так важно следить за корректными настройками времени, даты, языковых форматов, а также уметь все эти параметры настраивать. В системах Linux всё это позволяет выполнять команда date.
Синтаксис и основные опции
Согласно официальной информации, доступной из справочного руководства (команда man date), синтаксис команды date следующий:
date [OPTION] . . . [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY[.ss]]
Если дать команду date без аргументов или если аргументы начинаются с символа «+», то по-умолчанию будет выведено текущие значения даты и времени. В ином случае производится установка даты и времени, передаваемые в аргументах в каком-либо из форматов. Например, для установки времени введите команду
MM — Месяц
DD — День,
hh — часы в 24-часовом формате,
mm — минуты,
YYYY — 4 цифры года,
ss — секунды.
Прежде чем установить время проверьте правильность установки временной зоны.
Ниже мы боле подробно рассмотрим параметры ввода даты и времени.
Следующая команда выводит информацию о текущих дате и времени в форматированном виде:
Как видно, символ «+» позволяет печатать установленные (текущие) значения, а следующее за ним выражение задаёт формат вывода этих значений. Шаблон подстановки «%n» здесь служит для переноса строки. Все остальные шаблоны подстановки используются для выборки соответствующих компонент времени: месяцы, дни, часы, минуты и т. д. Само же выражение должно заключаться в кавычках, если в нём присутствуют пробельные символы.
Параметры CC, YY и .ss в синтаксисе date означают две последние цифры года, век и секунды (от 0 до 59) соответственно. И эти параметры не являются обязательными. Для того, чтобы устанавливать дату и время с помощью команды date, необходимы права суперпользователя.
В следующей таблице приводится описание основных опций команды date:
Опция | Значение |
-d, —date=STRING | Вычисляет день недели для заданной даты в качестве STRING. Дата задаётся в формате ггммдд. |
-f, —file=DATEFILE | То же самое, что и -d, но для исходных данных используется содержимое из файла FILE. |
-r, —reference=FILE | Определяет время последней модификации файла FILE. |
-s, —set=STRING | Устанавливает время/дату, заданные строкой STRING. |
-u, —utc, —universal | Использование формата |
Форматы ввода/вывода даты и времени
Для формата ввода даты/времени предусматриваются специальные элементы записи того или иного компонента даты/времени. В следующей таблице приводится описание этих элементов записи в виде пар букв, которым соответствуют составляющие даты и времени:
Элемент | Описание |
mm | Минуты — от 0 до 59. |
hh | Часы — от 0 до 23. |
DD | Дни — от 0 до 28, 29, 30 и 31. |
MM | Месяцы — от 01 до 12. |
Как уже можно было видеть, возвращаемые командой данные из её вывода можно форматировать произвольным способом, используя для этого специальные шаблоны подстановки или параметры форматирования. Они служат, как уже было отмечено выше, для выборки требуемых компонентов данных даты/времени из вывода команды date. Список этих параметров довольно длинный, но при этом его легко запомнить, поскольку наименования параметров довольно логичны. Следующая таблица отражает самые основные и часто используемые параметры форматирования:
Параметр | Назначение |
%a | День недели в кратком виде. |
%A | День недели в полном виде. |
%b | Название месяца в кратком виде. |
%B | Название месяца полностью. |
%c | Дата и время, например Чт 07 мар 2019 18:31:22 |
%d | День месяца в цифровом обозначении. |
%D | Дата, например 03/07/19 |
%e | День месяца. Печатает цифровое значение дня месяца с предстоящим отступом. |
%F | Полная дата, например 2019-03-07. |
%g | Последние две цифры года в формате |
%G | Год полностью в формате |
%H | Час суток в 24-часовом формате (00..23) |
%I | Час суток в 12-часовом формате (01..12) |
%j | День года (001..366) |
%k | Час суток в 24-часовом формате с предстоящим отступом. |
%l | Час суток в 12-часовом формате с предстоящим отступом. |
%m | Месяц (01..12). |
%M | Минута (00..59). |
%n | Переводит вывод на новую строку. |
%N | Выводит наносекунды (000000000.999999999). |
%q | Номер квартала года (1..4). |
%R | Время в 24-часовом формате. |
%s | Количество секунд, прошедших с момента 1 января 1970 00: |
%S | Секунды (00..60). |
%u | День недели, если первый день недели — понедельник (1..7). |
%U | Номер недели в году, если первый день недели — воскресенье (00..53). |
%w | День недели, если первый день — воскресенье (0..6). |
%W | Номер недели в году, если первый день недели — понедельник (00..53). |
%y | Последние две цифры года (00..99). |
%Y | Год. |
Примеры использование команды date
Выше уже был пример вывода текущих даты и времени с использованием произвольного форматирования. Поэтому рассмотрение примеров стоит начать с более практичных вариантов применения команды date. Например, очень удобно использование опции -s для установки даты/времени, поскольку она позволяет передавать команде date строку, содержащую требуемое значение в «человекопонятном» виде:
Узнать время последнего изменения какого-либо файла:
Узнать день недели по его дате:
$ date -d 190423 Вт апр 23 00:00:00 +04 2019
Вообще, команду date очень активно используют программисты для написания программного кода приложений, работающих с датой/временем, а также при написании скриптов для автоматизации некоторых процессов. Например, для автоматического наименования фалов, в имени которых содержится подстрока с датой его создания:
$ cp settings.php settings.php_back-$(date +%d%m%y)
В результате будет создана копия файла settings.php под именем settings.php_back-070319. В данном случае используется директива $() для задания имени файла. Нужно заметить, что данный приём — очень мощный инструмент при работе в командной оболочке Linux.
Заключение
В заключение следует отметить отличную гибкость и большие возможности простой консольной утилиты, доступной по команде date, которая на первый взгляд не представляется заслуживающей внимания. Однако, команда date – это яркий пример «маленькой, но очень эффективной программы» в UNIX-подобных системах.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Похожие записи:
Изменение даты линукс терминал
Библиотека сайта rus-linux.net
ntp . Получите ее из репозитария. После того, как она будет установлена, вы можете настроить ее следующим образом:
Отредактируйте файл /etc/ntpd.conf . Он будет выглядеть следующим образом:
# С параметрами по умолчанию, устанавливаемыми ниже, программа ntpd будет выполнять синхронизацию ваших часов. # # Подробности смотрите: # - страница man для ntp.conf # - http://support.ntp.org/bin/view/Support/GettingStarted # - https://wiki.archlinux.org/index.php/Network_Time_Protocol_daemon # Используемые общедоступные сервера пулов NTP; смотрите http://www.pool.ntp.org/ server 0.pool.ntp.org server 1.pool.ntp.org server 2.pool.ntp.org # Доступ на чтение только из localhost restrict default noquery nopeer restrict 127.0.0.1 restrict ::1 # Месторасположение файлов drift и log driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntp.log # ЗАМЕЧАНИЕ: Если у вас работает программа dhcpcd и у вас указаны строки такие как 'restrict' и 'fudge', указываемые # здесь, удостоверьтесь, что в /etc/conf.d/net для перемннных dhcpcd_ethX добавлены параметры '-Y -N'
Удостоверьтесь, что вы запустили демон, и сделайте так, чтобы он автоматически запускался при загрузке системы.
Для Arch Linux это: /etc/rc.d/ntpd start ; для Debian и производных систем: /etc/init.d/ntpd start
Обновление из командной строки времени по значению, получаемому с сервера времени
Вы можете обновлять время вручную без использования демона ntpdate
Вы получите что-то вроде следующего:
19 Apr 15:45:23 ntpdate[10948]: step time server 129.6.15.28 offset -45.697084 sec
Если вы используете Gnome, щелкните правой кнопкой мыши по изображению часов и выберите пункт настройки adjust, или в меню выберите пункт System > Administration > Time and Date (Система > Администрирование > Время и дата). Вам, возможно, будет предложено ввести пароль.
Вы увидите окно, похожее на следующее: