Nástroj, který hledáte, je faketime
.
faketime 'yesterday 9am' /bin/date
faketime '2018-10-25 16:45' /bin/date
Je možné použít libovolný název časového pásma, který neexistuje, a nastavit čas až na +- 24 hodin. Za předpokladu, že MYFAKETIME
neexistuje jako platné časové pásmo (zatím neexistuje, ale může být definováno v budoucnu (velmi nepravděpodobné)), pak je to možné:
[email protected]:~$ date
Sun Sep 30 01:22:05 EST 2018
[email protected]:~$ TZ=MYFAKETIME date
Sun Sep 30 06:22:43 MYFAKETIME 2018
[email protected]:~$ TZ=MYFAKETIME+1 date
Sun Sep 30 05:22:56 MYFAKETIME 2018
[email protected]:~$ TZ=MYFAKETIME+10 date
Sat Sep 29 20:23:00 MYFAKETIME 2018
[email protected]:~$ TZ=MYFAKETIME+20 date
Sat Sep 29 10:23:05 MYFAKETIME 2018
[email protected]:~$ TZ=MYFAKETIME+24 date
Sat Sep 29 06:23:08 MYFAKETIME 2018
[email protected]:~$ TZ=MYFAKETIME+48 date
Sat Sep 29 06:23:14 MYFAKETIME 2018
[email protected]:~$ TZ=MYFAKETIME+96 date
Sat Sep 29 06:23:25 MYFAKETIME 2018
[email protected]:~$
Všimněte si, že časová pásma nad 24 prostě nefungují. Ne změnit čas, ale jsou omezeny na rozsah -24
až +24
. Od 21.4.7 Určení časového pásma pomocí TZ
První formát se používá, když v místním časovém pásmu není letní čas (nebo letní čas):
std offset
Řetězec std určuje název časové zóny. Musí obsahovat tři nebo více znaků dlouhé a nesmí obsahovat úvodní dvojtečku, vložené číslice, čárky ani znaménka plus a mínus. Název časové zóny od offsetu neodděluje žádný znak mezery, takže tato omezení jsou nezbytná pro správnou analýzu specifikace.
Posun určuje hodnotu času, kterou musíte přidat k místnímu času, abyste získali hodnotu koordinovaného světového času. Má syntaxi jako [+|-]hh[:mm[:ss]]. To je kladné, pokud je místní časové pásmo západně od nultého poledníku, a záporné, pokud je na východ. Hodina musí být mezi 0 a 24 a minuty a sekundy mezi 0 a 59.
Neexistuje tedy žádný způsob, jak změnit čas na „dny do budoucnosti“ pomocí proměnné TZ.
Skutečným řešením je použití faketime
utility (ze stejnojmenného balíčku).
To vám umožní:
[email protected]:~$ faketime '2008-12-24 08:15:42' /bin/date
Wed Dec 24 08:15:42 EST 2008
[email protected]:~$ date
Sun Sep 30 01:44:29 EST 2018
Stačí nastavit TZ
variabilní. Pozitivní hodnoty jdou na východ, stejně jako pozadu GMT.
např.
$ 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
To vám umožní jít pouze +/- 24 hodin.