명령 행에서 UNIX 타임 스탬프에 대한 형식화 된 날짜를 얻는 방법


59

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

답변:


91

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=UTC0UTC 날짜를 가지고 환경 변수를 ( TZ=UTC0 정의 라는 시간대 UTC의 행동 동안과는 UTC에서 오프셋 0 TZ=UTC결코 오프셋 ()을 (지정되지 않은 대부분의 시스템이 참조 할에 불구하고 시스템 정의 시간대는 UTCUTC에서 오프셋 0으로 도 호출 됨 )).


1
그럼에도 불구하고 많은 파기가 필요하지만, 이러한 일반적인 작업에는 놀라운 일입니다.
David Z

감사합니다, 당신의 대답을 받아 들였습니다. info coreutils date좀 더 자세히 읽었어야 했어요 .
Umang

이것은 나에게 약간 다른 날짜를주고 있습니다 : date -r 1447264553943결과는 Wed Dec 28 01:39:03 BRST 47831실제로 11/11/2015, 3:55:53 PM GMT-2:00입니다.
falmp

1
@falmp : 마이크로 초 대신 초를 사용하면 작동합니다.

@hop ops는 올해 47831로 계산해야했지만 그 수는 너무 높아서 놓쳤습니다. 감사!
falmp

6

인터넷 검색 후 date명령으로 만 수행 할 수있는 방법을 찾았습니다 .

$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds"
Sat Aug 21 09:18:28 MSD 2010

고마워 나는 더 간단한 것이 있기를 바랐으므로 지금 당장 투표하십시오.
Umang

구글이 당신을 어리석게 만드는 또 다른 좋은 예입니다. 아무도 더 이상 문서를 읽지 않습니까?

1
@hop, date -d @xxx2005 년에 coreutils 5.3까지는 지원 이 추가되지 않았습니다.
Stéphane Chazelas

@ StéphaneChazelas : a)이 답변은 2010 년이며 b) 문서를 읽기 전에 왜 인터넷 검색을 사용하지 않습니까? 자신의 권한으로 대답하면 이와 같은 오류를 핑계 할 수 있지만 어쨌든 찾아야하는 경우 올바르게 찾아보십시오.

@hop, 나는 그것이 멍청한 대답이 아니라 오래된 것임을 지적했습니다.
Stéphane Chazelas

6

이 펄 원 라이너는 다음을 수행합니다.

$ perl -e 'print scalar localtime $ARGV[0]' 1282367908
Sat Aug 21 09:18:28 2010

5

쉘 내장으로 :

  • 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 printf솔루션에 대한 참조가 있습니까?
Derek Mahar


2

osx에서 UTC로

date -r "1475737200" -u

감사. 허용 된 답변에서 정보를보다 쉽게 ​​사용할 수 있도록 편집했습니다.
Stéphane Chazelas

1

현대 유닉스의 풍부한 유산에 대한 또 다른 깔끔한 예. 이것은 실제로 대부분의 BSD 변형에서 가능합니다.

$ TZ=UTC date -r 1282368345
Sat Aug 21 05:25:45 UTC 2010

(BTW 귀하의 예가 1 초 정도 벗어난 것 같습니다)


Linux에서는 작동하지 않습니다. 홉의 대답에는 올바른 Linux 대답이있는 것 같습니다. 지적 해 주셔서 감사합니다, 나는 그런 일이 일어날 것으로 의심되어 지금 45 초 만들었습니다.
Umang

1

오래된 질문에 대한 답변이지만 다른 사람이 이것을 검색하면 개선 될 수 있다고 생각합니다. 이 Bash 기능은 Linux 및 OS X에서 모두 작동합니다. 다른 BSD 시스템에서는 테스트하지 않았습니다. 에포크 시간을이 함수의 인수로 전달하면 RFC-3339 시간 형식이 인쇄됩니다.

epochtorfc3339 ()
{
    RFC3339_FORMAT="+%FT%T:::%z"
    EPOCH=$(echo $@ | 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
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.