![cli에서 에포크 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하는 방법은 무엇입니까?](https://linux55.com/image/41974/cli%EC%97%90%EC%84%9C%20%EC%97%90%ED%8F%AC%ED%81%AC%20%ED%83%80%EC%9E%84%EC%8A%A4%ED%83%AC%ED%94%84%EB%A5%BC%20%EC%82%AC%EB%9E%8C%EC%9D%B4%20%EC%9D%BD%EC%9D%84%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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 @1190000000
1190000000을 해당 시대로 바꾸세요.
답변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