Programing

유닉스 타임 스탬프를 날짜 문자열로 변환

crosscheck 2020. 7. 25. 10:33
반응형

유닉스 타임 스탬프를 날짜 문자열로 변환


유닉스 타임 스탬프를 유닉스 명령 줄의 날짜로 변환하는 빠르고 간단한 방법이 있습니까?

date각 요소 (월, 일, 년, 시간 등)를 지정하는 것이 다소 어색한 점을 제외하고는 작동 할 수 있으며 제대로 작동하는 방법을 알 수 없습니다. 더 쉬운 방법이있을 것 같습니다-뭔가 빠졌습니까?


GNU를 사용 date하면 다음을 수행 할 수 있습니다.

date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969

(보낸 사람 : 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 또는 다른 명령이 필요하지 않습니다 . 유닉스 타임 스탬프는 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 Timestamp를 날짜로 변환


@TomMcKenzie가 다른 답변에 대한 의견에서 언급했듯이 date -r 123456789Unix Epoch 이후 초 단위로 주어진 시간 동안 더 일반적이고 더 널리 구현 된 간단한 솔루션이지만 불행히도 보편적으로 보장되는 휴대용 솔루션은 없습니다.

-d시스템의 여러 유형에 대한 옵션은 GNU 날짜보다는 완전히 다른 무언가 의미 --date확장을. 안타깝게도 GNU Date는 -r이러한 다른 구현과 동일하게 해석하지 않습니다 . 불행히도 date사용중인 버전을 알고 있어야 하며 많은 이전 Unix date명령은 두 가지 옵션을 지원하지 않습니다.

더 나쁜 것은 POSIX datePOSIX Awk도 부족하기 때문에 명령 줄에서 유닉스 시간을 형식화하기 위해 명령을 전혀 인식하지 -d못하고 -r표준 방법을 제공하지 않는다는 것입니다 strftime(). (당신은 사용할 수 없습니다 touch -tls이전 때문에 유닉스 신기원 이후의 초로 주어진 시간을 허용하지 않습니다.)

Brian Kernighan에서 직접 사용할 수있는 One True Awk에는 이제 Unix Epoch 이후 현재 시간을 초 단위로 반환 strftime()하는 systime()기능 뿐만 아니라 내장 기능이 있으므로 Awk 솔루션이 가장 이식성이 뛰어납니다.


어색한 표기법을 찾으면 -R-option이 도움이 될 수 있습니다. 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 년까지 일광 절약이 계속해서 시행 되었기 때문이라고 생각합니다.


여기의 다른 예는 기억하기 어렵습니다. 가장 간단하게 :

date -r 1305712800

The standard Perl solution is:

echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'

(or localtime, if preferred)


awk 'BEGIN { print strftime("%c", 1271603087); }'

Put the following in your ~/.bashrc :

function unixts() { date -d "@$1"; }

Example usage:

$ unixts 1551276383

Wed Feb 27 14:06:23 GMT 2019

참고URL : https://stackoverflow.com/questions/3249827/convert-unix-timestamp-to-a-date-string

반응형