Unix 타임스탬프를 날짜 문자열로 변환
Unix 타임스탬프를 Unix 명령줄에서 날짜로 빠르게 변환할 수 있는 방법이 있습니까?
date각 요소(월, 일, 연도, 시간 등)를 지정하는 것이 다소 어색하고, 어떻게 하면 제대로 동작할 수 있는지 알 수 없다는 점만 빼면 됩니다.더 쉬운 방법이 있을 것 같은데, 제가 뭘 놓쳤나요?
★★★★★★★★★★★★★★★★ dateGNU coreutils에서 다음 작업을 수행할 수 있습니다.
date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969
(From: BASH: Unix 타임스탬프를 날짜로 변환)
X에서는 OS X 를 합니다.date -r.
date -r "$TIMESTAMP"
또는를를를 altern altern altern altern는 altern altern altern altern 。strftime()셸에서 직접 사용할 수 없지만 gawk를 통해 액세스할 수 있습니다.그%c 는, 합니다.specifier 는, 로케일에 의존한 방법으로 타임스탬프를 표시합니다.
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
epoch를 가져오는 명령어
date +%s
1357004952
크레딧은 Anton: BASH: Unix 타임스탬프를 날짜로 변환
@가 또 @TomMcKenzie는 @TomMcKenzie에게 .date -r 123456789님은 Unix Epoch 이후 몇 초 동안 사용되었던 보다 일반적인(즉, 보다 광범위하게 구현된) 단순한 솔루션이지만 안타깝게도 보편적으로 보장되는 휴대용 솔루션은 없습니다.
-d많은 의 GNU Date와 것을 합니다.--date안타깝게도 GNU Date를 해석하지 .-r다른 구현과 동일합니다. 때문에 아쉽게도 어떤 의 '버전'을 합니다.date있는 것 에 많은 Unix " " " " " " Unix 」date명령어는 어느 옵션도 지원하지 않습니다.
더 evenix POSIX 。date 쪽도 되지 않는다.-d 않다-r인 방법을 에는 Unix 시간이 strftime()할 수 .)touch -t ★★★★★★★★★★★★★★★★★」ls왜냐하면 전자는 Unix Epoch 이후 초단위로 지정된 시간을 받아들이지 않기 때문입니다.)
로 Brian 할 수 있는 One 는 Brian Kernighan에서 할 수 .strftime() 및 """ " " " " " " 。systime()Unix Epoch 이후 현재 시간을 초 단위로 반환하는 기능)을 제공합니다.따라서 아마도 Awk 솔루션이 가장 휴대성이 높을 것입니다.
위의 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년까지 지속적으로 시행되었기 때문이라고 생각합니다.
이 표기법을 쓸 수 있을 거예요.-R이 됩니다 -옵션은 도움이 됩니다.RFC 2822: RFC 2822에 규정되어 있습니다.이 식별자가 하지 않습니다.date -d @1278999698 -R할 수 date -d @1278999698 +%c 거예요 :-) 아, 맞다. :-)
여기 있는 다른 예들은 기억하기 어렵다.간단히 말하면 다음과 같습니다.
date -r 1305712800
표준 Perl 솔루션은 다음과 같습니다.
echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'
(또는 현지시간(원하는 경우))
awk 'BEGIN { print strftime("%c", 1271603087); }'
~/.bashrc에 다음 내용을 입력합니다.
function unixts() { date -d "@$1"; }
사용 예:
$ unixts 1551276383
Wed Feb 27 14:06:23 GMT 2019
Python:
python -c "from datetime import datetime; print(datetime.fromtimestamp($TIMESTAMP))"
3가지 비고:
bash에 대해서
이 질문에는 bash 태그가 붙어 있고 답변은 없습니다.주소는 이쪽입니다.printf 배시즘:
문::printf '%(fmt)T' $UNIXEPOCH
bash 아래에 은 V4.2 (2011년 2월) bash, printf (2011년 2월) bash는 printf "입니다.%(fmt)T 값에 과 같은을 사용할 수.specifier: "strftime" 을 지정합니다.
TZ=UTC LANG=C printf '%(%A %d %b %Y, %T %Z)T\n' 12345678
Saturday 23 May 1970, 21:21:18 UTC
없이, 인수와 함께 사용합니다.-1인수로서 현재 시각이 출력됩니다.
printf '%(%b %d, %T)T\n'
Aug 03, 08:42:28
~로printf명령줄에 있는 인수 수에 대해 형식 시퀀스를 반복합니다.
$ TZ=UTC LANG=C printf '%(%A %d %b %Y, %T %Z)T\n' -1 123456789 $EPOCHSECONDS
Sunday 20 Nov 2022, 13:04:42 UTC
Thursday 29 Nov 1973, 21:33:09 UTC
Sunday 20 Nov 2022, 13:04:42 UTC
인수나 문자열 없이printf '%()T'현재 시간을 인쇄합니다.
printf '%()T\n'
12:34:56
echo $(( $(TZ=UTC printf "%()T" | sed 's/:/* 3600 +/;s/:/* 60 +/') -
$(printf "%(%s)T") % 86400 ))
0
. 2 $EPOCHSECONDS ★★★★★★★★★★★★★★★★★」$EPOCHREALTIME 변수
이후 bash 에는 V5.0 bash의 두 변수가 .$EPOCHSECONDS및 Unix Epoch 의 초수로 됩니다.$EPOCHREALTIME이는 Unix 시대 이후 몇 초 만에 마이크로초 단위로 확장됩니다.
myvar1=$(LANG=C date -d 'now -1 day' +%c)
LANG=C printf -v myvar2 '%(%c)T' $(( EPOCHSECONDS - 86400 ))
[[ $myvar1 == "$myvar2" ]] || echo "Something's wrong: '$myvar1' != '$myvar2'!"
하고, 정정초초초초초초 1 초초초초초초초초 。$myvar1 ★★★★★★★★★★★★★★★★★」$myvar2 이는 , , , , , , , , 등으로 출력되지 $myvar1에는 should should than than than than than than than than than than than than than than 와 완전히 같은 문자열을 포함해야 합니다.$myvar2.
declare -p myvar{1,2}
declare -- myvar1="Tue Aug 2 11:11:35 2022"
declare -- myvar2="Tue Aug 2 11:11:35 2022"
~로printf는 빌트인입니다.UNIXTIME 변환에서 문자열 변수를 할당하기 위한 포크는 없습니다.
유일한 차이점은 리소스 설치 공간과 실행 시간입니다.
관한 및 $EPOCHREALTIMEbash 빌트인을 사용하여 현재 시간을 마이크로초 단위로 인쇄하는 방법을 참조하십시오.
.3 GNU 3 GNU에date
선 option-f의 엔트리에 있어서
GNU를 사용하여 많은 unixtimestamp를 포맷할 계획이라면date이치노
먼저 (를 추가해야 합니다.@타임스탬프 에 )를 date -f는, 각 조작으로 할 수 .즉, 1개의 조작으로 처리할 수 있습니다.
sed 's/^/@/' < inputfile |
date -f - +'%A %d %b %Y, %T %Z'
샘플:
seq 123456789 $(((EPOCHSECONDS-123456789)/4)) $EPOCHSECONDS |
sed 's/^/@/' |
LANG=C TZ=GMT date -f - +'%A %d %b %Y, %T %Z'
다음과 같은 것을 생성해야 합니다.
Thursday 29 Nov 1973, 21:33:09 GMT
Thursday 30 Jan 1986, 11:53:49 GMT
Thursday 02 Apr 1998, 02:14:29 GMT
Wednesday 02 Jun 2010, 16:35:09 GMT
Wednesday 03 Aug 2022, 06:55:49 GMT
. 4 스트리밍 로그 파일 변환
이것은 제목일 수 있습니다.
스트리밍된 Unix 타임스탬프를 실시간으로 최신 문자열로 변환합니다.
「 」를 tail -f squid/access.log로부터 「」를 참조해 주세요.
squid을 사용하다
1659526597.212 240128 192.168.0.184 TCP_TUNNEL/200 3383 CONNECT safebrowsing.googleapis.com:443 - HIER_DIRECT/172.217.168.74 - 1659526614.078 753 192.168.0.91 TCP_TUNNEL/200 3800 CONNECT shavar.services.mozilla.com:443 - HIER_DIRECT/44.236.110.253 -
Squid 프록시를 원격으로 추적하려면 다음을 사용할 수 있습니다.
exec {fd}<> <(:) # This will open unnamed fifo.
그리고나서
ssh root@proxyserver tail -f /var/log/squid/access.log |
tee >(
exec sed -ue 's/^\([0-9]\+\)\..*/@\1/'|
stdbuf -i0 -o0 date -f - +%c >/dev/fd/$fd
) |
sed -ue 's/^[0-9]\+\././'|
paste -d '' /dev/fd/$fd -
버퍼링 없이 다음과 같이 출력됩니다.
Wed Aug 3 13:36:37 2022.212 240128 192.168.0.184 TCP_TUNNEL/200 3383 CONNECT safebrowsing.googleapis.com:443 - HIER_DIRECT/172.217.168.74 -
Wed Aug 3 13:36:54 2022.078 753 192.168.0.91 TCP_TUNNEL/200 3800 CONNECT shavar.services.mozilla.com:443 - HIER_DIRECT/44.236.110.253 -
+C로 정지했다가 닫을 때까지 여러 번 재실행할 수 있습니다.$fd"FIFO by: "FIFO"
exec {fd}<&-
언급URL : https://stackoverflow.com/questions/3249827/convert-unix-timestamp-to-a-date-string
'programing' 카테고리의 다른 글
| 치명적인 오류: Visual Studio에서 "대상 아키텍처 없음" (0) | 2023.04.14 |
|---|---|
| 항목이 변경될 때 관찰 가능한 수집 알림 (0) | 2023.04.14 |
| React Native에서 보기 크기 가져오기 (0) | 2023.04.14 |
| Bash에서 문자열의 첫 번째 문자 제거 (0) | 2023.04.14 |
| c#(WinForms-App) Excel로 데이터 세트 내보내기 (0) | 2023.04.14 |