답변:
그 이유는 POSIX 시간대TZ=UTC-8
로 해석되기 때문입니다 . POSIX 시간대 형식에서 3 개의 문자는 시간대 약어 (임의의 임의)이며 숫자는 시간대가 UTC 보다 뒤에있는 시간 수입니다 . 따라서 "UTC"라는 표준 시간대는 실제 UTC보다 -8 시간 또는 UTC + 8 시간입니다.UTC-8
(UNIX가 UTC보다 뒤에있는 미국에서 개발 되었기 때문에 그렇게 작동합니다.이 형식을 사용하면 미국 시간대를 EST5, CST6 등으로 나타낼 수 있습니다.)
다음 예제에서 무슨 일이 일어나고 있는지 알 수 있습니다.
$ TZ=UTC-8 date +'%Z %z'
UTC +0800
$ TZ=UTC8 date +'%Z %z'
UTC -0800
$ TZ=FOO-8 date +'%Z %z'
FOO +0800
ISO -0800
표준 시간대 형식은 -
영역이 UTC보다 뒤에 있고 +
해당 영역이 UTC보다 앞서 있음 을 나타내는 반대 접근 방식을 취합니다 .
TZ=America/Los_Angeles
입니다. 일광 절약 시간제 동안 태평양 시간이 -7이라는 것을 잊고 있습니다.
TZ=:America/Los_Angeles
합니다. 콜론은 그것이 Olson 시간대 파일임을 나타냅니다. 그리고 또 다른 의견에서 그는 일광 절약 시간제를 무시하고 싶었지만 언급하지 않았습니다.
EST-5
CST-6
하세요.
Why?
POSIX가 필요 하기 때문에 .
앞에 '-'가 붙는 시간대는 프라임 자오선의 동쪽입니다. 그렇지 않으면 서쪽이되어야합니다 (선택적인 선행 '+'로 표시 될 수 있음).
따라서 이것은 [1] 근처에 시간을 줄 것입니다 Los Angeles
(시간대 텍스트의 경우 3 글자 레이블 사용).
$ TZ=ANY8 date "+%Y-%m-%d %H:%M:%S %Z%z"
2016-04-23 10:47:12 ANY-0800
$ TZ=GMT+8 date "+%Y-%m-%d %H:%M:%S %Z%z"
2016-04-23 10:47:12 GMT-0800
그리고 이것은 Shanghai, China
또는 근처에 시간을 주어야합니다 Perth, Australia
:
$ TZ=ANY-8 date "+%Y-%m-%d %H:%M:%S %Z%z"
2016-04-24 02:47:12 ANY+0800
$ TZ=CST-8 date "+%Y-%m-%d %H:%M:%S %Z%z"
2016-04-23 02:47:12 CST+0800
[1] 실제 "현지 시간"을 변경하는 DST (일광 절약 시간제)가있을 수 있기 때문에 가까이에 있습니다.
다른 방법 zdump
으로이 명령 을 사용하여 다른 시간대 + 오프셋으로 현재 시간을 표시 할 수 있습니다 .
Zdump는 명령 줄에 이름이 지정된 각 영역 이름으로 현재 시간을 인쇄합니다.
시간대에도 동일한 규칙이 적용됩니다. 주요한 자오선의 서쪽은 "뒤에"있고 동쪽은 "앞에"있습니다.
$ zdump PST PST 토요일 12 월 7 일 03:25:27 2013 PST
이 스크립트를 사용하여 우리가 사용 zdump
하고 싶은 시간대 + 오프셋 중 일부를 표시하여 date
비교할 수 있도록했습니다.
$ cat cmd.bash
#!/bin/bash
printf "\ndate: %s\n\n" "$(date)"
for tz in EST PST PST+8 PST-8 UTC UTC+8 UTC-8; do
echo "-- timezone $tz"
printf "zdump: %s\n" "$(zdump $tz)"
printf "date: %s\n" "$(TZ=$tz date +'%a %b %d %T %Y - (%Z %z)')"
echo ""
done
당신이 그것을 실행하면 다음 당신은의 비교를 볼 수 있습니다 zdump
로를 date
:
$ ./cmd.bash
date: Sat Dec 7 02:59:05 EST 2013
-- timezone EST
zdump: EST Sat Dec 7 02:59:05 2013 EST
date: Sat Dec 07 02:59:05 2013 - (EST -0500)
-- timezone PST
zdump: PST Sat Dec 7 07:59:05 2013 PST
date: Sat Dec 07 07:59:05 2013 - (PST +0000)
-- timezone PST+8
zdump: PST+8 Fri Dec 6 23:59:05 2013 PST
date: Fri Dec 06 23:59:05 2013 - (PST -0800)
-- timezone PST-8
zdump: PST-8 Sat Dec 7 15:59:05 2013 PST
date: Sat Dec 07 15:59:05 2013 - (PST +0800)
-- timezone UTC
zdump: UTC Sat Dec 7 07:59:05 2013 UTC
date: Sat Dec 07 07:59:05 2013 - (UTC +0000)
-- timezone UTC+8
zdump: UTC+8 Fri Dec 6 23:59:05 2013 UTC
date: Fri Dec 06 23:59:05 2013 - (UTC -0800)
-- timezone UTC-8
zdump: UTC-8 Sat Dec 7 15:59:05 2013 UTC
date: Sat Dec 07 15:59:05 2013 - (UTC +0800)
TZ=PST+8 date
. 감사. 또한 아래의이 설명을 발견man timezone
. 성병 문자열이 시간대의 이름을 지정하고 세 개 이상의 알파벳 문자해야한다 "오프셋 문자열은 즉시 세계시를 (협정 얻기 위해 현지 시간에 추가 할 표준 및 지정 시간 값을 다음과 같습니다 : UTC). 현지 시간대가 프라임 자오선 서쪽이면 동부 표준시 오프셋이고 양수가 동쪽이면 음수입니다. 시간은 0과 24 사이, 분과 초는 0과 59 사이 여야합니다. "