L'outil que vous recherchez est faketime
.
faketime 'yesterday 9am' /bin/date
faketime '2018-10-25 16:45' /bin/date
Il est possible d'utiliser n'importe quel nom de fuseau horaire qui n'existe pas et de régler l'heure jusqu'à +- 24 heures. En supposant que MYFAKETIME
n'existe pas en tant que fuseau horaire valide (il n'existe pas encore, mais peut être défini dans le futur (très peu probable)), alors c'est possible :
[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]:~$
Notez que les fuseaux horaires supérieurs à 24 ne fonctionnent tout simplement pas. Ils ne le font pas modifier l'heure mais sont limités à la plage -24
à +24
. A partir de 21.4.7 Spécifier le fuseau horaire avec TZ
Le premier format est utilisé lorsqu'il n'y a pas d'heure d'été (ou d'heure d'été) dans le fuseau horaire local :
std offset
La chaîne std spécifie le nom du fuseau horaire. Il doit comporter trois caractères ou plus long et ne doit pas contenir de deux-points au début, de chiffres incorporés, de virgules, ni de signes plus et moins. Il n'y a pas de caractère espace séparant le nom du fuseau horaire du décalage, ces restrictions sont donc nécessaires pour analyser correctement la spécification.
Le décalage spécifie la valeur de temps que vous devez ajouter à l'heure locale pour obtenir une valeur de temps universel coordonné. Il a une syntaxe comme [+|-]hh[:mm[:ss]]. Ceci est positif si le fuseau horaire local est à l'ouest du premier méridien et négatif s'il est à l'est. L'heure doit être entre 0 et 24 , et les minutes et secondes entre 0 et 59.
Il n'y a donc aucun moyen de changer l'heure en "jours dans le futur" à l'aide de la variable TZ.
La vraie solution est d'utiliser le faketime
utilitaire (du package du même nom).
Cela vous permettra de faire :
[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
Définissez simplement le TZ
variable. Les valeurs positives vont vers l'Est, donc derrière GMT.
par exemple
$ 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
Cela ne vous laissera partir que +/- 24 heures.