Linux
Linux:設置不存在的時區偏移量?
是否可以在任何 Linux 上強制時區偏移超出“有效”範圍 -12 到 +14?
我正在尋找一種方法來臨時模擬可能是未來幾天的“本地時間”(用於測試目的),如果可能的話,無需實際更改系統時鐘。
可以使用任何不存在的時區名稱並將時間設置為 +- 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 指定時區噹噹地時區沒有夏令時(或夏令時)時,使用第一種格式:
std offset
std 字元串指定時區的名稱。它的長度必須為三個或更多字元,並且不能包含前導冒號、嵌入的數字、逗號,也不能包含加號和減號。時區名稱與偏移量之間沒有空格字元,因此這些限制對於正確解析規範是必要的。
偏移量指定您必須添加到本地時間才能獲得協調世界時值的時間值。它的語法類似於
$$ +|- $$呵呵$$ :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