すべてのLinuxで「有効な」範囲-12から+14を超えたタイムゾーンオフセットを強制することは可能ですか?
可能であれば、実際にシステムクロックを変更せずに数日後(テスト目的で)「現地時間」を一時的にシミュレートする方法を探しています。
答え1
存在しないタイムゾーン名を使用でき、時間を+- 24時間に設定できます。MYFAKETIME
有効なタイムゾーンが存在しないと仮定すると(まだではありませんが、将来定義できます(可能性なし))、次のことが可能です。
isaac@mail:~$ date
Sun Sep 30 01:22:05 EST 2018
isaac@mail:~$ TZ=MYFAKETIME date
Sun Sep 30 06:22:43 MYFAKETIME 2018
isaac@mail:~$ TZ=MYFAKETIME+1 date
Sun Sep 30 05:22:56 MYFAKETIME 2018
isaac@mail:~$ TZ=MYFAKETIME+10 date
Sat Sep 29 20:23:00 MYFAKETIME 2018
isaac@mail:~$ TZ=MYFAKETIME+20 date
Sat Sep 29 10:23:05 MYFAKETIME 2018
isaac@mail:~$ TZ=MYFAKETIME+24 date
Sat Sep 29 06:23:08 MYFAKETIME 2018
isaac@mail:~$ TZ=MYFAKETIME+48 date
Sat Sep 29 06:23:14 MYFAKETIME 2018
isaac@mail:~$ TZ=MYFAKETIME+96 date
Sat Sep 29 06:23:25 MYFAKETIME 2018
isaac@mail:~$
24を超える時間帯は機能しません。彼らはそうです。いいえ時間を変更しますが、-24
範囲内でのみ変更してください+24
。 ~から21.4.7 TZを使用したタイムゾーンの指定
最初の形式は、ローカルタイムゾーンに夏時間(またはDST)がない場合に使用されます。
std offset
std 文字列はタイムゾーン名を指定します。確かにそうです3つ以上の文字非常に長い必要があり、前にコロン、挿入された数字、カンマ、プラス記号またはマイナス記号を含めないでください。タイムゾーン名とオフセットを区別するスペース文字がないため、これらの制限は仕様を正しく解析するために必要です。
オフセットは、協定世界時を取得するために現地時間に追加する必要がある時間値を指定します。構文は [+|-]hh[:mm[:ss]] と似ています。ローカルタイムゾーンが本初子午線の西側の場合、値は正であり、ローカルタイムゾーンが本初子午線の東側の場合は負です。時間は0から24まで、0から59までの分と秒。
したがって、TZ変数を使用して時間を「将来の日数」に変更することはできません。
実際の解決策は、このfaketime
ユーティリティ(同じ名前のパッケージにあります)を使用することです。
これにより、次のことができます。
isaac@mail:~$ faketime '2008-12-24 08:15:42' /bin/date
Wed Dec 24 08:15:42 EST 2008
isaac@mail:~$ date
Sun Sep 30 01:44:29 EST 2018
答え2
TZ
変数を設定するだけです。正の値も東に移動後ろにグリニッジ標準時。
例えば
$ 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
+/- 24時間だけ残ります。
答え3
あなたが探しているツールはですfaketime
。
faketime 'yesterday 9am' /bin/date
faketime '2018-10-25 16:45' /bin/date