Lo strumento che stai cercando è faketime .
faketime 'yesterday 9am' /bin/date
faketime '2018-10-25 16:45' /bin/date
È possibile utilizzare qualsiasi nome di fuso orario che non esiste e impostare l'ora fino a +- 24 ore. Supponendo che MYFAKETIME non esiste come fuso orario valido (non esiste ancora, ma potrebbe essere definito in futuro (molto improbabile)), quindi è possibile:
example@unixlinux.online:~$ date
Sun Sep 30 01:22:05 EST 2018
example@unixlinux.online:~$ TZ=MYFAKETIME date
Sun Sep 30 06:22:43 MYFAKETIME 2018
example@unixlinux.online:~$ TZ=MYFAKETIME+1 date
Sun Sep 30 05:22:56 MYFAKETIME 2018
example@unixlinux.online:~$ TZ=MYFAKETIME+10 date
Sat Sep 29 20:23:00 MYFAKETIME 2018
example@unixlinux.online:~$ TZ=MYFAKETIME+20 date
Sat Sep 29 10:23:05 MYFAKETIME 2018
example@unixlinux.online:~$ TZ=MYFAKETIME+24 date
Sat Sep 29 06:23:08 MYFAKETIME 2018
example@unixlinux.online:~$ TZ=MYFAKETIME+48 date
Sat Sep 29 06:23:14 MYFAKETIME 2018
example@unixlinux.online:~$ TZ=MYFAKETIME+96 date
Sat Sep 29 06:23:25 MYFAKETIME 2018
example@unixlinux.online:~$
Tieni presente che i fusi orari superiori a 24 non funzionano. Non cambiano l'ora ma sono limitati all'intervallo -24 a +24 . Da 21.4.7 Specificare il fuso orario con TZ
Il primo formato viene utilizzato quando non c'è l'ora legale (o l'ora legale) nel fuso orario locale:
std offsetLa stringa std specifica il nome del fuso orario. Deve contenere tre o più caratteri lungo e non deve contenere due punti iniziali, cifre incorporate, virgole, né segni più e meno. Non esiste uno spazio che separa il nome del fuso orario dall'offset, quindi queste restrizioni sono necessarie per analizzare correttamente la specifica.
L'offset specifica il valore dell'ora che devi aggiungere all'ora locale per ottenere un valore di Coordinated Universal Time. Ha una sintassi come [+|-]hh[:mm[:ss]]. Questo è positivo se il fuso orario locale è ad ovest del Primo Meridiano e negativo se è ad est. L'ora deve essere tra 0 e 24 , e i minuti ei secondi compresi tra 0 e 59.
Quindi, non c'è modo di cambiare l'ora in "giorni nel futuro" usando la variabile TZ.
La vera soluzione è usare il faketime utility (dal pacchetto con lo stesso nome).
Questo ti permetterà di fare:
example@unixlinux.online:~$ faketime '2008-12-24 08:15:42' /bin/date
Wed Dec 24 08:15:42 EST 2008
example@unixlinux.online:~$ date
Sun Sep 30 01:44:29 EST 2018
Basta impostare il TZ variabile. I valori positivi vanno a est, così come dietro GMT.
es
$ TZ=GMT date
Sat Sep 29 19:12:30 GMT 2018
$ TZ=FAKEEAST+15 date
Sat Sep 29 04:12:36 FAKEEAST 2018
$ TZ=FAKEWEST-15 date
Sun Sep 30 10:12:41 FAKEWEST 2018
Questo ti lascerà andare solo +/- 24 ore.