현재 시스템 시간(마이크로초 분해능)을 알고 싶습니다.
date +%s
에포크(1-1-1970) 이후의 시간을 초 단위로 반환합니다. 마이크로초 단위로 시간 해상도를 어떻게 얻을 수 있나요? 이 값을 쿼리할 때 지연이 얼마나 되나요? 대기 시간이란 t
쿼리 시점의 초 단위를 의미합니다 . 이는 나에게 t + t'
어떤 가치를 제공합니까 t'
?
내 사용 사례: 여러 개의 Raspberry Pi를 동시에 사용하여 동영상을 녹화합니다. 이제 비디오의 각 프레임에 타임스탬프를 추가하여 정렬할 수 있습니다. 현재 타임스탬프에는 시작 시간(시작 이후 시간)이 사용됩니다. 부팅 시간은 정확하지만 각 라즈베리파이의 부팅 시간은 다릅니다. 모든 Pi를 NTP 서버로 구성하여 모두 동일한 시스템 시간을 갖도록 했습니다. 그래서 기본적으로 부팅 시간보다는 시스템 시간의 타임스탬프를 원합니다. 어떻게 해야 하나요?
답변1
date +%s%N
에포크 이후 나노초를 제공합니다. 마이크로초를 얻으려면 평가를 수행하세요.
expr `date +%s%N` / 1000
답변2
date
모든 명령(심지어 명령 포함)을 실행하는 데 최소한 수백 마이크로초가 걸린다는 점을 고려하면 쉘 스크립트에서 이러한 종류의 정밀도를 요구하는 것은 별 의미가 없습니다.
특히 명령을 사용하여 date
이 정밀도로 명령 실행 시간을 측정할 수는 없습니다.
이를 위해서는 time
명령이나 키워드를 사용하는 것이 좋습니다.
일부 구현에서는 다음을 제공하기 위해 형식을 변경할 수 있습니다.과거시간의 정확도는 1초 미만입니다.
$ bash -c 'TIMEFORMAT=%3R; time date +%s'
1432210052
0.001
$ ksh -c 'TIMEFORMAT=%3R; time date +%s'
1432210094
0.001
$ zsh -c 'TIMEFMT=%*E; time date +%s'
1432210123
0.001
다양한 셸에는 시간을 확보할 수 있는 다양한 내장형(따라서 최소한의 지연) 방법이 있습니다.
ksh93
그리고 유형을 다음으로 변경하면 1초 미만의 정확도를 제공하는 변수가 zsh
있습니다.$SECONDS
뜨다:
$ zsh -c 'typeset -F SECONDS=0; date; echo "$SECONDS"'
Thu 21 May 13:09:37 BST 2015
0.0012110000
$ ksh -c 'typeset -F SECONDS=0; date; echo "$SECONDS"'
Thu 21 May 13:09:42 BST 2015
0.0010249615
zsh
특수 변수 가 있습니다 $EPOCHREALTIME
(모듈에서 사용 가능 zsh/datetime
):
$ zsh -c 'zmodload zsh/datetime; echo $EPOCHREALTIME; date; echo $EPOCHREALTIME'
1432210318.7319943905
Thu 21 May 13:11:58 BST 2015
1432210318.7333047390
ksh93
최신 버전은 내장 형식을 지원하지만 ( bash
GNU 확장임에도 불구하고) 표현 방법에 동의하지 않습니다 .%(format)T
printf
bash
%N
지금.
$ ksh -c 'printf "%(%s.%N)T\n" now;printf "%(%s.%N)T\n" now'
1432210726.203840000
1432210726.204068000
(보시다시피 내장 명령 호출 사이에는 여전히 228마이크로초가 있습니다.)
답변3
말씀하신 대로 date +%s
에포크 이후의 초 수를 반환합니다. 그래서,
date +%s%N
초와 현재 나노초를 반환합니다.
date +%s%N
마이크로초 단위의 값을 얻으려면 값을 1000으로 나눕니다 . 즉.
echo $(($(date +%s%N)/1000))
답변4
나는 보통 date +%s%6N
마이크로초를 얻는 데 사용합니다. 아래 표는 각 타임스탬프에 대한 빠른 치트 시트입니다.
타임스탬프 유형 | 타임스탬프를 가져오는 명령 | 예시 값 |
---|---|---|
초 | date +%s |
1698581801 |
밀리초 | date +%s%3N |
1698581813630 |
마이크로초 | date +%s%6N |
1698581885706258 |
나노초 | date +%s%N |
1698581886792509947 |