Conheço comandos para definir hora e/ou data específicas, mas não consigo encontrar aqueles que movam a hora em relação à hora atual.
Quais são os comandos para avançar/retroceder o tempo x segundos/minutos/horas? (E possivelmente também dias/meses/anos?)
Responder1
O comando para definir a hora do sistema édate
. Você precisa ser root para definir a hora do sistema. date
define o tempo para o horário determinado, não para um valor relativo do horário atual, porque esse último comportamento seria bastante inútil. Você pode criar um comando que modifique a hora atual em uma quantidade relativa, fazendo um cálculo na saída date
e retornando-o date
, por exemplo (em Linux não incorporado)
date $(date +%m%d%H%M%Y.%S -d '1 hour ago')
Esteja ciente de que se você estiver executando um sistema de cronometragem como o NTP, alterar o relógio dessa maneira irá confundi-lo. Pare primeiro.
A execução date
define a hora do sistema, não o relógio do hardware. No Linux, executehwclock --systohc
copiar a hora do sistema para o relógio do hardware; isso é feito automaticamente em um desligamento limpo.
Se você quiser ver a hora em um fuso horário diferente, esqueça tudo isso e defina o fuso horário desejado. No Linux, executetzselect
para definir o fuso horário do sistema. Para executar um programa em um fuso horário diferente, defina a TZ
variável de ambiente, por exemplo
export TZ=Asia/Tokyo
emacs
Se você quiser executar um programa e fazê-lo acreditar que o tempo é diferente do que realmente é, execute-o no programafaketime
.
faketime '1 hour ago' date
Responder2
Você também pode usar o seguinte formato para obter a quantidade de tempo antes da hora atual:
$ 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
Além disso, você pode usar ago
um horário anterior à data atual:
$ date
Fri Aug 18 16:14:41 CST 2017
$ date --date='1 month 2 days ago'
Sat Sep 16 16:14:43 CST 2017
Você pode usar a --set
opção paracontextohora, mas adicionando um +
sinal antes do número de horas, minutos, etc., que você deseja adicionar à data real:
$ 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
Espero que isto seja útil.
Responder3
date -Ins -s $(date -Ins -d '-1 hour')
Responder4
Se bem me lembro, no UNIX SVR4, havia uma opção "-a" para o comando "data", que permitiria ao superusuário ajustar o relógio para frente ou para trás em alguns segundos.