Как перевести системное время вперед/назад?

Как перевести системное время вперед/назад?

Я знаю команды для установки определенного времени и/или даты, но не могу найти те, которые перемещают время относительно текущего времени.

Какие команды переводят время вперед/назад на x секунд/минут/часов? (И, возможно, также на дни/месяцы/годы?)

решение1

Команда для установки системного времени:date. Вам нужно быть пользователем root, чтобы установить системное время. dateустанавливает время на заданное время, а не на относительную величину от текущего времени, поскольку последнее поведение было бы довольно бессмысленным. Вы можете создать команду, которая изменяет текущее время на относительную величину, выполнив расчет на выходе dateи отправив его обратно в date, например (на невстроенном Linux)

date $(date +%m%d%H%M%Y.%S -d '1 hour ago')

Будьте осторожны, если вы используете систему хронометража, такую ​​как NTP, изменение часов таким образом собьет ее с толку. Сначала остановите ее.

Запуск dateустанавливает системное время, а не аппаратные часы. В Linux запуститеhwclock --systohcдля копирования системного времени в аппаратные часы; это делается автоматически при чистом завершении работы.

Если вы хотите увидеть время в другом часовом поясе, забудьте обо всем этом и установите вместо этого желаемый часовой пояс. В Linux запуститеtzselectдля установки часового пояса системы. Чтобы запустить программу в другом часовом поясе, установите TZпеременную окружения, например

export TZ=Asia/Tokyo
emacs

Если вы хотите запустить программу и заставить ее поверить, что время отличается от того, которое есть на самом деле, запустите ее под программойfaketime.

faketime '1 hour ago' date

решение2

Вы также можете использовать следующий формат, чтобы получить количество времени, опережающее текущий момент:

$ date --date='1 month'
Sun Sep 17 15:01:11 CST 2017
$ date --date='1 month'
Sun Sep 17 15:01:15 CST 2017
$ date --date='1 month 2 hours'
Sun Sep 17 17:01:23 CST 2017
$ date --date='1 month 2 hours 3 minutes'
Sun Sep 17 17:04:30 CST 2017

Также вы можете использовать agoвремя до текущей даты:

$ date
Fri Aug 18 16:14:41 CST 2017
$ date --date='1 month 2 days ago'
Sat Sep 16 16:14:43 CST 2017

Вы можете использовать --setопцию дляпараметрвремя, но добавив +знак перед числом часов, минут и т. д., которое вы хотите прибавить к фактической дате:

$ date
Thu Aug 17 15:07:00 CST 2017
$ date --set='+1 day +1 hour'
Fri Aug 18 16:07:24 CST 2017
$ date
Fri Aug 18 16:07:31 CST 2017
$ date --set='+1 month 3 days +1 hour'
Thu Sep 21 17:07:42 CST 2017

Надеюсь, это будет полезно.

решение3

date -Ins -s $(date -Ins -d '-1 hour')

решение4

Если я правильно помню, в UNIX SVR4 в команде «date» была опция «-a», которая позволяла суперпользователю переводить часы вперед или назад на определенное количество секунд.

Связанный контент