Linux: 존재하지 않는 시간대 오프셋을 설정하시겠습니까?

Linux: 존재하지 않는 시간대 오프셋을 설정하시겠습니까?

모든 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 문자열은 시간대 이름을 지정합니다. 확실히 그렇습니다세 개 이상의 문자매우 길어야 하며 앞에 콜론, 삽입된 숫자, 쉼표, 더하기 또는 빼기 기호를 포함해서는 안 됩니다. 시간대 이름과 오프셋을 구분하는 공백 문자가 없으므로 이러한 제한은 사양을 올바르게 구문 분석하는 데 필요합니다.

오프셋은 협정 세계시를 얻기 위해 현지 시간에 추가해야 하는 시간 값을 지정합니다. 구문은 [+|-]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

관련 정보