Linux

Linux:設置不存在的時區偏移量?

  • December 10, 2020

是否可以在任何 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

引用自:https://unix.stackexchange.com/questions/472317