답변:
date +%s
에포크 이후 초 수를 반환합니다 .
date +%s%N
초와 현재 나노초를 반환합니다.
date +%s%N | cut -b1-13
에포크 이후 현재 시간 (밀리 초)에 왼쪽 세 나노초를 더한 밀리 초를 표시합니다.
과에서 MikeyB - echo $(($(date +%s%N)/1000000))
(1000 분할 만 마이크로에 제공)
echo $(($(date +%s%N)/1000))
%3N
나노초를 가장 중요한 3 자리 숫자 (밀리 초)로 자르기 위해 간단히 사용할 수 있습니다 .
$ date +%s%3N
1397392146866
이것은 예를 들어 내 kubuntu 12.04에서 작동합니다.
그러나 %N
대상 시스템에 따라 구현되지 않을 수 있습니다. 예를 들어 임베디드 시스템 (빌드 루트 rootfs, 비 HF arm 크로스 툴체인을 사용하여 컴파일)에서 테스트 한 결과는 %N
다음과 같습니다.
$ date +%s%3N
1397392146%3N
(또한 내 (뿌리가 아닌) 안드로이드 태블릿에는 없습니다 %N
).
1397392146%3N
것을 1397392146%N
보았지만 결과는 1397392146%3N
안드로이드 태블릿의 busybox 콘솔에서 실제로 본 것입니다. 편집 내용을 설명해 주시겠습니까?
date +%s.%3N
인쇄합니다 1510718281.134
.
date +%N
OS X에서는 작동하지 않지만 다음 중 하나를 사용할 수 있습니다
ruby -e 'puts Time.now.to_f'
python -c 'import time; print time.time()'
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
DateTime.utc_now() |> DateTime.to_unix(:millisecond)
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
외부 프로그램을 실행하여 밀리 초 를 얻는 것을 제안하는 사람들에게는 그 속도로 다음을 수행 할 수도 있습니다.
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
요점 : 여기에서 답을 고르기 전에 모든 프로그램이 1 초 이내에 실행되는 것은 아닙니다. 법안!
date
실행하는 데 3ms가 걸립니다.
이 솔루션은 macOS에서 작동합니다.
bash 스크립트 사용을 고려하고 파이썬을 사용할 수 있다면 다음 코드를 사용할 수 있습니다.
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
스크립트가 실행 된 시간을 표시하는 방법을 찾고 있다면 다음과 같은 결과가 제공됩니다 (완전히 정확하지는 않음).
스크립트 시작 부분에 다음과 같이 입력하십시오.
basetime=$(date +%s%N)
1361802943996000000과 같은 시작 값을 제공합니다.
스크립트가 끝나면 다음을 사용하십시오.
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
다음과 같이 표시됩니다
runtime: 12.383 seconds
노트:
원하는 경우 (1 * 10 ^ 09)를 1000000000으로 대체 할 수 있습니다.
"scale=3"
bc
당신이 원하는 것을 강요하는 다소 드문 설정입니다 . 더 많은 것이 있습니다!
나는 Win7 / MinGW에서만 이것을 테스트했다 ... 나는 적절한 * nix 상자가 없다.
time <script>
나누기를 수행하지 않고 밀리 초 단위로 시간을 얻는 방법은 다음과 같습니다. 아마도 더 빠를 수도 있습니다 ...
# test=`date +%s%N`
# testnum=${#test}
# echo ${test:0:$testnum-6}
1297327781715
업데이트 : 순수 bash의 다른 대안은 bash 4.2+
위와 동일하지만 printf
날짜를 얻는 데 사용됩니다. 프로세스가 메인 프로세스에서 분리되지 않기 때문에 확실히 빠릅니다.
printf -v test '%(%s%N)T' -1
testnum=${#test}
echo ${test:0:$testnum-6}
그러나 여기에서 또 다른 캐치는 점이다 strftime
구현이 지원해야 %s
하고 %N
내 테스트 시스템의 경우 어떤 아닙니다. man strftime
지원되는 옵션을 참조하십시오 . 참조 man bash
표시 printf
구. -1
및 -2
시간에 대한 특별한 값입니다.
strftime(3)
지원하지 않아 나노초를 인쇄 %N
할 방법 이없는 것 같습니다 printf
. 우분투 14.04를 사용하고 있습니다.
date
더 안정적인 옵션처럼 보입니다.
우리가 얻을 수있는 가장 정확한 타임 스탬프 (적어도 Mac OS X의 경우)는 다음과 같습니다.
python -c 'import datetime; print datetime.datetime.now().strftime("%s.%f")'
1490665305.021699
그러나 실행하는 데 약 30 밀리 초가 걸린다는 점을 명심해야합니다. 우리는 이것을 2 자리 분수로자를 수 있으며, 처음 에는 시간을 읽는 평균 오버 헤드 를 계산 한 다음 측정에서 제거 할 수 있습니다. 예를 들면 다음과 같습니다.
function getTimestamp {
echo `python -c 'import datetime; print datetime.datetime.now().strftime("%s.%f")' | cut -b1-13`
}
function getDiff {
echo "$2-$1-$MeasuringCost" | bc
}
prev_a=`getTimestamp`
acc=0
ITERATIONS=30
for i in `seq 1 $ITERATIONS`;do
#echo -n $i
a=`getTimestamp`
#echo -n " $a"
b=`echo "$a-$prev_a" | bc`
prev_a=$a
#echo " diff=$b"
acc=`echo "$acc+$b" | bc`
done
MeasuringCost=`echo "scale=2; $acc/$ITERATIONS" | bc`
echo "average: $MeasuringCost sec"
t1=`getTimestamp`
sleep 2
t2=`getTimestamp`
echo "measured seconds: `getDiff $t1 $t2`"
echo 명령을 주석 해제하여 작동 방식을보다 잘 볼 수 있습니다.
이 스크립트의 결과는 일반적으로 다음 3 가지 결과 중 하나입니다.
measured seconds: 1.99
measured seconds: 2.00
measured seconds: 2.01
날짜와 expr을 사용하면 거기에 갈 수 있습니다.
X=$(expr \`date +%H\` \\* 3600 + \`date +%M\` \\* 60 + \`date +%S\`)
echo $X
원하는대로 할 수 있도록 확장하세요
나는 이것이 획기 이후 밀리 초를주지 않는다는 것을 알고 있지만, 일부 경우에 대한 답변으로 여전히 유용 할 수 있습니다. 모두 밀리 초 숫자가 필요한 경우 실제로 필요한 것에 따라 1000을 곱합니다. : D
가장 간단한 방법은 작은 실행 파일 (C f.ex에서)을 만들어 스크립트에서 사용할 수 있도록하는 것입니다.
date
여러 번 실행되는 잠재적 인 문제가 있습니다 . 경우에 따라 명령이 작성 될 때 실행간에 날짜 나 시간이 변경 될 수 있습니다. date
한 번 실행 하고 부품을 파싱하고 계산을 수행하는 것이 좋습니다 . 그렇게하는 몇 가지 방법 중 하나는 다음과 같습니다 t=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. 이것은 질문에 bash 태그가 붙어 있기 때문에 Bash 구문을 사용합니다 . 당신이 암시하는 것처럼, 당신의 대답 (및 나의 변형)은 지금까지의 시간을 초 단위로 제공합니다.
(위에서 반복) date +%N
OS X에서는 작동하지 않지만 다음을 사용할 수도 있습니다.
Perl (Time :: Format 모듈 필요) 아마도 사용하기에 가장 좋은 CPAN 모듈은 아니지만 작업을 수행 할 수 있습니다. Time :: Format은 일반적으로 배포판에서 사용할 수 있습니다.
perl -w -e'use Time::Format; printf STDOUT ("%s.%s\n", time, $time{"mmm"})'
date
사용할 수 없으며 필요에 응답하는 bash 전용 명령이 없습니다.
date
사용할 수 없는지 분명히 밝히 려면 공감대를 제거하겠습니다.
OSX에있을 때 이전 응답을 모두 합치기
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G31+
당신은 좋아할 수 있습니다
microtime() {
python -c 'import time; print time.time()'
}
compute() {
local START=$(microtime)
#$1 is command $2 are args
local END=$(microtime)
DIFF=$(echo "$END - $START" | bc)
echo "$1\t$2\t$DIFF"
}