시간 차이를 밀리초 단위로 계산합니다.

시간 차이를 밀리초 단위로 계산합니다.

입력 및 출력 오류:

14:00:11,320      14:00:11,453 
**Correct Output** :  Time difference is 133 milli seconds.

14:00:13,097       14:00:13,124 
**Output in Error** :  line 4: 124000000 - 097000000: value too great for base (error token is "097000000")  

14:00:11:693      14:00:13:048 
**Output in Error** :  line 4: 048000000: value too great for base (error token is "048000000")

사용된 스크립트:

g=$(( $(date -d $b +%s) - $(date -d $a +%s) ))
h=$(( $(date -d $b +%N) - $(date -d $a +%N) ))
k=$(( (g * 1000) + (h / 1000000) ))
printf "Total time difference: %i milli seconds\n"  $k

답변1

0당신 말이 맞습니다. 이 수학은 bash 및 대부분의 다른 쉘에서 실패합니다. 왜냐하면 숫자가 다음으로 시작하는 C 규칙을 따르기 때문입니다.8진수, 십진수 아님:

$ echo "$((124000000 - 097000000))"
bash: 124000000 - 097000000: value too great for base (error token is "097000000")

한 가지 해결책은 bash할 숫자를 기본 10으로 올바르게 식별하는 것입니다.

$ echo "$((10#124000000 - 10#097000000))"
27000000

문제는 10#접두사가 없으면 bash는 0으로 시작하는 숫자를 8진수로 가정한다는 것입니다.

또는 다음을 사용하십시오 bc.

$ echo "124000000 - 097000000" | bc -l
27000000

아니면 awk를 사용하세요:

$ echo "124000000 097000000" | awk '{print $1-$2}'
27000000

수학과 printf를 결합:

$ g=124000000
$ h=097000000
$ printf "Total time difference: %i milli seconds\n" "$(echo "$g - $h" | bc -l )"
Total time difference: 27000000 milli seconds

또는,

$ g=124000000
$ h=097000000
$ echo "$g $h" | awk '{printf "Total time difference: %i milliseconds\n",$1-$2}'; )
Total time difference: 27000000 milli seconds

문서

에서 man bash:

0으로 시작하는 상수는 8진수로 해석됩니다. 앞에 0x 또는 0X가 있으면 16진수를 나타냅니다. 그렇지 않은 경우 숫자는 [base#]n 형식을 취합니다. 여기서 선택적 밑은 산술 밑을 나타내는 2~64 사이의 십진수이고 n은 해당 밑의 숫자입니다.

수학과 날짜 결합

$ echo "$(( $(date -d '14:00:13.124' '+10#%s%N') - $(date -d '14:00:13.097' '+10#%s%N') ))"
27000000

나노초를 밀리초로 변환하려면:

$ echo "$(( ($(date -d '14:00:13.124' '+10#%s%N') - $(date -d '14:00:13.097' '+10#%s%N'))/1000000 ))"
27

$ echo "$(( ($(date -d '14:00:05.320' '+10#%s%N') - $(date -d '14:00:04.909' '+10#%s%N'))/1000000 ))"
411

관련 정보