시간(밀리초)을 가져오는 명령
리눅스에 시간을 밀리초 단위로 구하는 셸 명령이 있습니까?
date +"%T.%N"현재 시간을 나노초로 반환합니다.06:46:41.431857000date +"%T.%6N"나노초를 처음 6자리로 반올림한 현재 시간(마이크로초)을 반환합니다.06:47:07.183172date +"%T.%3N"나노초를 처음 3자리로 반올림한 현재 시간(밀리초)을 반환합니다.06:47:42.773
일으로분, 모든야의의 date명령의 형식에는 선택적인 필드 너비를 지정할 수 있습니다.
date +%s%N초 수 + 현재 나노초를 반환합니다.
그므로러,echo $(($(date +%s%N)/1000000))당신에게 필요한 것입니다.
예:
$ echo $(($(date +%s%N)/1000000))
1535546718115
date +%s에포크 이후의 시간(초)을 반환합니다(도움이 될 경우).
나노는−9 10이고 밀리는−3 10입니다.따라서 나노초의 세 개의 첫 문자를 사용하여 밀리초를 얻을 수 있습니다.
date +%s%3N
man date:
%N나노초(000000000..999999999)
1970-01-01 00:00 UTC 이후 %s초
출처: Server Fault의 현재 Unix 시간(밀리초)을 Bash로 가져오려면 어떻게 해야 합니까?
에서 여기서 OS X 서, 위date에서는 를하지않다습을 하십시오.%N 그래권, 합니다장를을 합니다.coreutils홈브루를 사용합니다.이렇게 하면 다음 명령에 액세스할 수 있습니다.gdate처럼 행동할 것입니다.date는 Linux 시스템에서 수행됩니다.
brew install coreutils
보다 "원본적인" 경험을 위해, 당신은 언제든지 이것을 당신의 웹사이트에 추가할 수 있습니다..bash_aliases:
alias date='gdate'
그러면 실행
$ date +%s%N
다음은 밀리초 단위로 시간을 얻을 수 있는 리눅스용 휴대용 해킹입니다.
#!/bin/sh
read up rest </proc/uptime; t1="${up%.*}${up#*.}"
sleep 3 # your command
read up rest </proc/uptime; t2="${up%.*}${up#*.}"
millisec=$(( 10*(t2-t1) ))
echo $millisec
출력은 다음과 같습니다.
3010
이것은 셸 내부와 procfs에서 작동하는 매우 저렴한 작업입니다.
순수 배쉬 용액
때부터bash5.0 (2019년 1월 7일 출시) 기본 제공 변수를 사용할 수 있습니다.EPOCHREALTIME 정밀도(μs 이하를 에포크 를 포함합니다.echo $EPOCHREALTIME와 같은 것을 인쇄합니다.1547624774.371210)를 .마지막 세 곳은 밀리초 단위로 표시됩니다.
둘 중 하나 사용
(( t = ${EPOCHREALTIME/./} / 1000 ))
또는 그와 비슷한 것.
t=${EPOCHREALTIME/./} # remove the dot (s → µs)
t=${t%???} # remove the last three digits (µs → ms)
쪽이든t비슷한 것이 될 것입니다.1547624774371.
대부분의 경우 다른 답변으로 충분할 수 있지만, BusyBox 시스템에서 문제가 발생했기 때문에 2센트를 추가해야겠다고 생각했습니다.
을 하지 않았습니다.%Nformat 옵션이며 Python 또는 Perl 인터프리터가 없습니다.
우리는 머리를 긁적이며 다음과 같이 생각해 냈습니다.
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
의출서력에초마추를출다니합초로이크의 에서 초와 초를 합니다.adjtimex(시스템 시계의 옵션을 설정하는 데 사용되는 기호) 새 줄 없이 인쇄합니다(따라서 서로 접착됨).마이크로초 필드에는 0을 미리 추가해야 하지만 6자리보다 긴 초 필드에는 영향을 주지 않습니다.이때부터 마이크로초를 밀리초로 변환하는 것은 사소한 일이어야 합니다.
만약 당신이 뒤에 이어지는 새로운 선이 필요하다면 (아마도 더 좋아 보여서) 시도해 보세요.
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }' && printf "\n"
를 위해서는 또한이위는이 필요합니다.adjtimex그리고.awk사용 가능합니다.그렇지 않은 경우 BusyBox를 사용하여 로컬로 다음을 가리킬 수 있습니다.
ln -s /bin/busybox ./adjtimex
ln -s /bin/busybox ./awk
그런 다음 위의 내용을 다음과 같이 부릅니다.
./adjtimex | ./awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
아니면 당연히 당신은 그것들을 당신의 것에 넣을 수 있습니다.PATH
편집:
위의 내용은 내 BusyBox 장치에서 작동했습니다.해 보았는데 Ubuntu에서 Ubuntu를 했습니다.adjtimex버전이 다릅니다.Ubuntu에서 이 작업은 소수점에서 마이크로초(후행 새 줄 포함)까지의 시간(초)을 출력하는 데 사용되었습니다.
sudo apt-get install adjtimex
adjtimex -p | awk '/raw time:/ { print $6 }'
Ubuntu에서는 이렇게 하지 않을 것입니다.나는 사용할 것입니다.date +%s%N
date하지 않았기 을 사용했습니다.
millis(){ python -c "import time; print(int(time.time()*1000))"; }
OR
alias millis='python -c "import time; print(int(time.time()*1000))"'
편집: @CharlesDuffy의 코멘트를 따릅니다.자식 프로세스를 포크하는 데는 시간이 더 걸립니다.
$ time date +%s%N
1597103627N
date +%s%N 0.00s user 0.00s system 63% cpu 0.006 total
Python은 여전히 VM 시작 시간을 개선하고 있으며 컴파일된 코드(예:date).
에서는 약 - , 가, 약의즉 30ms - 60ms (다, 6ms니 5x-10x)가되었습니다.date)
$ time python -c "import time; print(int(time.time()*1000))"
1597103899460
python -c "import time; print(int(time.time()*1000))" 0.03s user 0.01s system 83% cpu 0.053 total
나는 생각했습니다.awk 다가니습보다 가볍습니다.python,그렇게awk ~ ~ ) 에서 사용됩니다. 6ms ~ 12ms 범 (표시: 1x ~ 2x):
$ time awk '@load "time"; BEGIN{print int(1000 * gettimeofday())}'
1597103729525
awk '@load "time"; BEGIN{print int(1000 * gettimeofday())}' 0.00s user 0.00s system 74% cpu 0.010 total
날짜와 시간대를 표시하는 방법
날짜 +"%d-%m-%Y %T.%N %Z"
출력 : 22-04-2020 18:01:35.970289239 IST
저는 앨퍼의 대답에 이 일을 성공시키기 위해 제가 해야 할 일을 덧붙이고 싶었습니다.
Mac에서는 다음과 같은 기능이 있습니다.brew install coreutils그래서 우리는 사용할 수 있습니다.gdate그렇지 않으면 리눅스에서는 그냥date또한 이 기능을 사용하면 임시 파일이나 다른 파일을 만들지 않고도 명령 시간을 지정할 수 있습니다.
function timeit() {
start=`gdate +%s%N`
bash -c $1
end=`gdate +%s%N`
runtime=$(((end-start)/1000000000.0))
echo " seconds"
}
문자열과 함께 사용할 수 있습니다.
timeit 'tsc --noEmit'
버전 4.1 이후 GNU AWK를 사용하면 시간 라이브러리를 로드하고 다음 작업을 수행할 수 있습니다.
$ awk '@load "time"; BEGIN{printf "%.6f", gettimeofday()}'
이렇게 하면 1970-01-01T00:00:00 이후의 현재 시간이 초 단위로 초 단위로 정확하게 인쇄됩니다.
the_time = gettimeofday()1970-01-01 UTC 이후 경과한 시간(초)을 부동 소수점 값으로 반환합니다.이 플랫폼에서 시간을 사용할 수 없는 경우 반환-1트세를 합니다.ERRNO반환되는 시간은 1초 미만의 정밀도를 가져야 하지만, 실제 정밀도는 플랫폼에 따라 다를 수 있습니다.표준 C일 경우gettimeofday()시스템 호출은 이 플랫폼에서 사용할 수 있으며, 그러면 단순히 값을 반환합니다.에는 MS-Windows의 그렇지를 하려고 합니다.GetSystemTimeAsFileTime().
시스템의 C 리눅스는 C입니다.getimeofday()마이크로초 정확도로 시간을 반환합니다.
bash에서 값을 생성하고 Java 코드에서 해당 값을 사용하여 다시 날짜(java.util)로 변환하고 싶습니다.
다음 명령은 bash 파일에 값을 생성하는 데 사용됩니다.
date +%s000
Perl은 AIX와 같은 이국적인 플랫폼에서도 사용할 수 있습니다.예:
#!/usr/bin/perl -w
use strict;
use Time::HiRes qw(gettimeofday);
my ($t_sec, $usec) = gettimeofday ();
my $msec= int ($usec/1000);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime ($t_sec);
printf "%04d-%02d-%02d %02d:%02d:%02d %03d\n",
1900+$year, 1+$mon, $mday, $hour, $min, $sec, $msec;
다음과 같은 Python 스크립트:
import time
cur_time = int(time.time()*1000)
10진수 초를 인쇄하는 방법
start=$(($(date +%s%N)/1000000)) \
&& sleep 2 \
&& end=$(($(date +%s%N)/1000000)) \
&& runtime=$((end - start))
divisor=1000 \
&& foo=$(printf "%s.%s" $(( runtime / divisor )) $(( runtime % divisor ))) \
&& printf "runtime %s\n" $foo # in bash integer cannot cast to float
출력:runtime 2.3
언급URL : https://stackoverflow.com/questions/16548528/command-to-get-time-in-milliseconds
'programing' 카테고리의 다른 글
| ASP에서 페이지를 새로 고치려면 어떻게 해야 합니까?NET? (코드로 다시 로드할 수 있음) (0) | 2023.05.11 |
|---|---|
| C#의 목록을 어떻게 연결합니까? (0) | 2023.05.11 |
| Visual Basic에서 클래스 생성자를 구현하는 방법은 무엇입니까? (0) | 2023.05.11 |
| .git는 제외 폴더를 무시하지만 특정 하위 폴더를 포함합니다. (0) | 2023.05.11 |
| Angular의 객체에 선택 요소 바인딩 (0) | 2023.05.11 |