UNIX 타임 스탬프가 있고 해당 타임 스탬프에 해당하는 형식화 된 날짜 (예 : date
출력)를 얻고 싶습니다.
지금까지 나의 시도 :
$ date +%s
1282367908
$ date -d 1282367908
date: invalid date `1282367908'
$ date -d +1282367908
date: invalid date `+1282367908'
$ date +%s -d +1282367908
date: invalid date `+1282367908'
다음과 같이 출력을 얻고 싶습니다.
$ TZ=UTC somecommand 1282368345
Sat Aug 21 05:25:45 UTC 2010
Mac OS X 및 BSD에서 :
$ date -r 1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -r 1282368345 +%Y-%m-%d
2010-08-21
GNU 핵심 도구 (정보 파일을 파헤쳐 야 함)) :
$ date -d @1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -d @1282368345 --rfc-3339=date
2010-08-21
둘 중 하나를 사용하여 -u
(표준) 옵션을 추가하거나 TZ=UTC0
환경 변수를 전달하여 UTC 날짜 (TZ=UTC0
defines UTC에서 오프셋이 0 인 UTC
(오프셋이없는) TZ=UTC
의 동작은 지정되지 않습니다 (대부분의 시스템에서 UTC
라는 시스템 정의 시간대를 참조하지만) UTC에서 오프셋 0)).
이 Perl 원 라이너는 다음과 같이합니다.
$ Perl -e 'print scalar localtime $ARGV[0]' 1282367908
Sat Aug 21 09:18:28 2010
인터넷 검색 후 date
명령으로 만 수행하는 방법을 찾았습니다.
$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds"
Sat Aug 21 09:18:28 MSD 2010
쉘 내장으로 :
zsh
(4.1.1 (2003) 이상) :
$ zmodload zsh/datetime
$ TZ=UTC0 strftime %c 1282368345
Sat 21 Aug 2010 05:25:45 UTC
ksh93
(ksh93i
(2000) 이상) :
$ TZ=UTC0 printf '%(%c)T\n' '#1282368345'
Sat Aug 21 05:25:45 2010
bash
(4.2 (2010) 이상) :
$ TZ=UTC0 printf '%(%c)T\n' 1282368345
Sat 21 Aug 2010 05:25:45 UTC
이 모든 것에서 %c
를 원하는 strftime()
형식으로 바꾸십시오.
오래된 질문에 대한 답변이지만 다른 사람이 이것을 검색하면 개선 될 수 있다고 생각합니다. 이 Bash 기능은 Linux 및 OS X에서 모두 작동합니다. 다른 BSD 시스템에서는 테스트하지 않았습니다. Epoch 시간을이 함수의 인수로 전달하면 RFC-3339 시간 형식이 인쇄됩니다.
epochtorfc3339 ()
{
RFC3339_FORMAT="+%FT%T:::%z"
Epoch=$(echo [email protected] | sed -n "s/.*\([0-9]\{10\}\).*/\1/p");
if date --version >/dev/null 2>/dev/null; then
# Linux
date ${RFC3339_FORMAT} -d "1970-01-01 UTC ${Epoch} seconds"
#date -d @${Epoch} --rfc-3339=seconds
else
# OS X/BSD
date -r ${Epoch} ${RFC3339_FORMAT}
fi
}
Osx에서 UTC로
date -r "1475737200" -u
현대 유닉스의 풍부한 유산에 대한 또 다른 깔끔한 예. 이것은 실제로 대부분의 BSD 변형에서 가능합니다.
$ TZ=UTC date -r 1282368345
Sat Aug 21 05:25:45 UTC 2010
(BTW 귀하의 예가 1 초 정도 벗어난 것 같습니다)