예를 들어, Swift에서는 다음을 수행합니다.
let date = Date(timeIntervalSinceReferenceDate: 500000)
print(date)
얻으려면 :
2001-01-06 18:53:20 +0000
답변1
Unix Epoch는 2001-01-01 00:00:00 UTC가 아닌 1970-01-01 00:00:00 UTC이므로 사용 가능한 도구(예: gnu date 명령)는 두 시간 사이의 초 수만 제공해야 합니다. 내장된 변환 기능은 결과의 실제 데이터를 제공합니다.
$ seconds=500000
$ TZ=UTC date --iso-8601=s -d @$(( $(date +%s -d '2001-01-01T00:00:00+00') + $seconds ))
2001-01-06T18:53:20+00:00
고쳐 쓰다: (의견을 주신 @Kusalananda에게 감사드립니다.) 실제로 Unix Epoch는 언급할 필요조차 없습니다. GNU date 명령은 주어진 날짜에 직접 시간 오프셋을 추가하는 것을 허용하기 때문입니다. 올바른 단위 접미사가 있어야 합니다(여기 seconds
). 이렇게 하면 명령이 더 간단해지고, 더 일반적이고, 읽기 쉬워집니다.
$ seconds=500000
$ TZ=UTC date --iso-8601=s -d "2001-01-01T00:00:00+00 + $seconds seconds"
2001-01-06T18:53:20+00:00
OP의 출력과 정확히 동일한 출력 형식을 출력하려면 다음 --iso-8601=s
으로 바꾸십시오.'+%F %T %z'
위 명령은 다음 옵션과 매개변수를 사용합니다.
-d
: 현재 날짜 대신 주어진 날짜를 사용합니다. 시간 오프셋 추가를 포함할 수 있습니다.--iso-8601=s
ISO 형식은 다음과 같이 공백을 주고받는 것과 유사합니다.+%F %T %z
설명이 필요합니다. 여기서 %z는 UTC로부터의 시간대 오프셋이며 강제로 인해+Y-%m-%d %H:%M:%S %z
여기서는 +0000이 됩니다.TZ=UTC
답변2
다음을 awk
지원하는 구현을 사용하십시오 (예: GNU 또는 GNU ).mktime()
strftime()
mawk
awk
$ awk 'BEGIN { epoch = mktime("2001 01 01 00 00 00"); print strftime("%F %T %z", epoch + 500000) }'
2001-01-06 18:53:20 +0000
먼저 2001-01-01 00:00에 해당하는 UNIX 타임스탬프를 만든 다음 500000초를 추가하고 strftime()
형식 문자열에 따라 결과를 형식화하고 인쇄합니다. 여기의 계산은 현지 시간으로 수행됩니다.
명령줄의 인수에서 초를 가져옵니다.
awk -v offset=500000 '
BEGIN { epoch = mktime("2001 01 01 00 00 00")
print strftime("%F %T %z", epoch + offset) }'
표준 입력에서 초(각 줄의 첫 번째 단어)를 읽습니다.
awk 'BEGIN { epoch = mktime("2001 01 01 00 00 00") }
{ print strftime("%F %T %z", epoch + $1) }'
awk
및 기능에 대한 설명과 사용 가능한 형식 문자열을 보려면 설명서를 참조하세요 .mktime()
strftime()
man strftime
UTC
계산 및 출력이 현지 시간 대신 UTC로 이루어지도록 TZ 환경 변수를 설정합니다 .
TZ=UTC awk ...as above...