Unix 타임 스탬프를 Unix 명령 줄에서 날짜로 변환하는 한 줄짜리 빠른 방법이 있습니까?
date
각 요소 (월, 일, 연도, 시간 등)를 지정하는 것이 다소 어색하다는 점을 제외하고는 작동 할 수 있으며 제대로 작동하도록하는 방법을 알 수 없습니다. 더 쉬운 방법이있는 것 같습니다. 내가 뭔가를 놓치고 있습니까?
답변
GNU를 사용 date
하면 다음을 수행 할 수 있습니다.
date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969
(From : BASH : Unix 타임 스탬프를 날짜로 변환 )
OS X에서는 date -r
.
date -r "$TIMESTAMP"
또는 strftime()
. 셸에서 직접 사용할 수는 없지만 gawk 를 통해 액세스 할 수 있습니다 . %c
지정 로케일에 의존하는 방식으로 타임 스탬프를 표시합니다.
echo "$TIMESTAMP" | gawk '{print strftime("%c", $0)}'
# echo 0 | gawk '{print strftime("%c", $0)}'
Wed 31 Dec 1969 07:00:00 PM EST
답변
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
뒤에 @
있는 숫자는 초 단위의 숫자입니다.
답변
이 솔루션은 date -d @
. AWK 또는 기타 명령이 필요하지 않습니다 . Unix 타임 스탬프는 1970 년 1 월 1 일 UTC 이후의 초 수이므로 UTC를 지정하는 것이 중요합니다.
date -d '1970-01-01 1357004952 sec UTC'
Mon Dec 31 17:49:12 PST 2012
Mac을 사용하는 경우 다음을 사용하십시오.
date -r 1357004952
시대를 얻기위한 명령 :
date +%s
1357004952
Anton의 크레딧 : BASH : Unix 타임 스탬프를 날짜로 변환
답변
@TomMcKenzie가 다른 답변에 대한 의견에서 말했듯이, date -r 123456789
이 Unix Epoch 이후 몇 초 동안 주어진 시간 동안 더 일반적으로 (즉 더 널리 구현 된) 간단한 솔루션이지만 불행히도 보편적으로 보장되는 휴대용 솔루션은 없습니다.
-d
시스템의 여러 유형에 대한 옵션은 GNU 날짜보다는 완전히 다른 무언가 의미 --date
확장을. 슬프게도 GNU Date는 -r
이러한 다른 구현과 동일하게 해석하지 않습니다 . 안타깝게도 어떤 버전을 date
사용 하고 있는지 알아야합니다.date
명령이 두 옵션 중 하나를 지원하지 않습니다.
설상가상으로 POSIX 는 명령 줄에서 Unix 시간을 형식화하기 위해 (내가 알고있는) 명령에서 표준 방법을 전혀 date
인식하지도 제공 하지도 -d
않으며 -r
제공 하지도 않습니다 (POSIX Awk에도 strftime()
. (당신은 사용할 수 없습니다 touch -t
및ls
이전 때문에 유닉스 신기원 이후의 초로 주어진 시간을 허용하지 않습니다.)
Brian Kernighan에서 직접 사용할 수있는 The One True Awk에는 이제 Unix Epoch 이후 현재 시간을 초 단위로 반환 strftime()
하는 systime()
함수 뿐만 아니라 함수가 내장 되어 있으므로 Awk 솔루션이 가장 이식성이 뛰어납니다.
답변
표기법이 이상 -R
하다고 생각되면 -옵션이 도움이 될 수 있습니다. RFC 2822 형식으로 날짜를 능가합니다. 따라서 모든 식별자가 필요하지는 않습니다 date -d @1278999698 -R
.. 또 다른 가능성은 로케일로 날짜를 초 단위로 출력하는 것입니다 : date -d @1278999698 +%c
. 기억하기 쉬워야합니다. 🙂
답변
위의 dabest1의 답변에 약간의 수정. 시간대를 GMT가 아닌 UTC로 지정합니다.
$ date -d '1970-01-01 1416275583 sec GMT'
Tue Nov 18 00:53:03 GMT 2014
$ date -d '1970-01-01 1416275583 sec UTC'
Tue Nov 18 01:53:03 GMT 2014
두 번째가 맞습니다. 그 이유는 영국에서 일광 절약이 1968 년부터 1971 년까지 지속적으로 시행 되었기 때문이라고 생각합니다.
답변
표준 Perl 솔루션은 다음과 같습니다.
echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'
(또는 선호하는 경우 현지 시간)
