존재하다AIX
date -u
GMT 형식으로 날짜와 시간을 제공합니다.
date
현지 시간대의 날짜와 시간을 제공합니다.
date +%s
현지 시간을 에포크 시간으로 제공합니다.
GMT 시간을 에포크 형식으로 얻는 방법이 있습니까?
내 버전의 AIX에서는 -n 및 -u 옵션만 사용할 수 있습니다. 따라서 -f 옵션을 사용할 수 없습니다.
내 목표는 현지 시간과 GMT 사이의 시간별 오프셋을 계산하는 것입니다.
나는 $TZ environment variable
이것이 지루할 수 있다는 것을 분석할 수 있다. 대신, 두 시간대 사이의 신기원 시차를 60으로 나누면 대략적인 답을 얻을 수 있습니다.
답변1
"에포크 형식의 현지 시간"과 같은 것은 없습니다. date +%s
항상 에포크 이후의 초 수, 즉 1970-01-01 UTC 이후의 초 수를 인쇄합니다. 숫자는 모든 시간대에서 동일합니다.
그러나 대부분의 strftime(3)
구현에서는 date +%z
지정된 시간대의 숫자 오프셋을 인쇄합니다.
$ TZ=Australia/Darwin date +%z
+0930
$ TZ=America/Toronto date +%z
-0400
이것은 GNU date
와 BSD 에서 작동합니다 date
. 하지만 나는 AIX에 대해 아무것도 모른다.
작동한다고 가정하면 모든 시간대에 대해 오프셋을 초 단위로 계산할 수 있습니다. 그리고 bash
:
#! /bin/bash
offset="$(TZ="$1" date +%z)"
sign=${offset:0:1}1
hours=${offset:1:2}
minutes=${offset:3:2}
if [ x"${hours:0:1}" = x0 ]; then hours="${hours:1}"; fi
if [ x"${minutes:0:1}" = x0 ]; then minutes="${minutes:1}"; fi
printf 'offset of TZ=%s: %d\n' "$1" $(( sign * 3600 * hours + 60 * minutes ))
답변2
UTC/GMT와 현지 시간 사이의 시차를 계산하는 것이 목표라면 다음과 같이 물어보세요.
UTC=$(date -u +%H)
LT=$(date +%H)
DIFF=$((UTC - LT))
시간과 상대 위치에 따라 결과가 부정적일 수 있습니다.
답변3
AIX에 Perl 5.9 이상이 있으면 다음을 사용할 수 있습니다.시간::조각핵심 모듈은 시간대 오프셋을 초 단위로 가져옵니다.
perl -MTime::Piece -le '$t=Time::Piece->new;print $t->tzoffset'
특정 시간대의 경우 다음을 수행합니다.
TZ=호주/다윈 perl -MTime::Piece -le '$t=Time::Piece->new;print $t->tzoffset'