cli에서 에포크 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하는 방법은 무엇입니까?

cli에서 에포크 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하는 방법은 무엇입니까?

cli에서 에포크 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하는 방법은 무엇입니까? 날짜를 사용하여 이를 수행할 수 있는 방법이 있다고 생각하지만 구문이 혼란스럽습니다(다른 방법도 환영합니다).

답변1

*BSD에서:

date -r 1234567890

Linux(특히 GNU coreutils ≥5.3):

date -d @1234567890

이전 버전의 GNU Date를 사용하면 UTC 시대와의 상대적인 차이를 계산할 수 있습니다.

date -d '1970-01-01 UTC + 1234567890 seconds'

이식성이 필요하다면 운이 좋지 않습니다. POSIX 쉘 명령을 사용하여(직접 계산을 수행하지 않고) 행의 형식을 지정할 수 있는 유일한 시간은 현재 시간입니다. 실제로 Perl을 사용할 수 있는 경우가 많습니다.

perl -le 'print scalar localtime $ARGV[0]' 1234567890

답변2

에포크 시간이 초가 아닌 밀리초 단위인 경우 마지막 세 자리 숫자 앞에 점을 추가하거나(user79743의 설명에서 제안한 대로) 마지막 세 자리를 제거한 후 다음으로 전달하세요 date -d.

직접 입력하면 잘못된 결과가 나타납니다.

$ date -d @1455086371603
Tue Nov  7 02:46:43 PST 48079     #Incorrect

마지막 세 자리 숫자 앞에 점을 추가하세요.

$ date -d @1455086371.603
Tue Feb  9 22:39:32 PST 2016     #Correct

또는 마지막 세 자리를 제거하십시오.

$ date -d @1455086371
Tue Feb  9 22:39:31 PST 2016      #Correct after removing the last three digits. You may remove and round off the last digit too.

답변3

date -d @11900000001190000000을 해당 시대로 바꾸세요.

답변4

다음을 갖 bash-4.2거나 그 이상:

$ printf '%(%FT%T%z)T\n' 1234567890
2009-02-13T23:31:30+0000

( 여기서는 %FT%T%z-type 형식, UTC 오프셋( ) strftime()을 포함하여 표준 명시적 형식이 사용됩니다 .)%z

이 구문은 에서 영감을 받았습니다 ksh93.

그러나 ksh93매개변수는 날짜 표현식으로 처리되며, 이에 대한 다양하고 거의 문서화되지 않은 형식이 지원됩니다.

Unix 시대 시간의 경우 구문은 다음 ksh93과 같습니다.

printf '%(%FT%T%z)T\n' '#1234567890'

ksh93그러나 자체 시간대 알고리즘을 사용하는 것으로 보이며 잘못될 수 있습니다. 예를 들어, 영국 본토에서는 1970년에 일년 내내 여름이었습니다.

$ TZ=Europe/London bash -c 'printf "%(%c)T\n" 0'
Thu 01 Jan 1970 01:00:00 BST
$ TZ=Europe/London ksh93 -c 'printf "%(%c)T\n" "#0"'
Thu Jan  1 00:00:00 1970

ksh93(그리고zsh strftime내장) 1초 미만의 속도를 지원하지만 아직 bash는 지원하지 않습니다.

$ ksh -c 'printf "%(%FT%T.%6N%z)T\n" 1234567890.123456789'
2009-02-13T23:31:30.123456-0000
$ zsh -c 'zmodload zsh/datetime; strftime %FT%T.%6.%z 1234567890 123456780'
2009-02-13T23:31:30.123457+0000

관련 정보