Я знаю команды для установки определенного времени и/или даты, но не могу найти те, которые перемещают время относительно текущего времени.
Какие команды переводят время вперед/назад на 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», которая позволяла суперпользователю переводить часы вперед или назад на определенное количество секунд.