두 개의 "텍스트 기반" 날짜에서 경과 시간을 얻는 방법

두 개의 "텍스트 기반" 날짜에서 경과 시간을 얻는 방법

Bash에서 두 시간의 차이를 계산하는 방법이 있는지 궁금합니다. 로그 파일에서 추출된 두 개의 필드가 있습니다.

시작시간 : 2월 12일 10:02:10 종료시간 : 2월 12일 10:53:15

나에게 필요한 것은 이 두 날짜 사이의 경과 시간을 수동으로 얻는 방법입니다. 시간 값은 날짜 생성 명령이 아닌 "텍스트 기반"이므로 이를 수행할 수 있는 방법이 있는지 모르겠습니다. 시간은 24시간 형식이므로 자정 이후의 시간을 처리하기가 더 쉬워지기를 바랍니다. 어떤 조언이라도 대단히 감사하겠습니다. 피터 V.

답변1

사용할 수 있는 몇 가지 사악한 트릭이 있습니다.

date -d "Feb 12 10:02:10" +%s

이 날짜의 에포크 이후 초 수를 반환합니다. 이를 동일한 명령(다른 날짜의 경우)과 결합하고 다음을 실행합니다 bc.

echo "$(date -d 'Feb 12 10:53:15' +%s) - $(date -d 'Feb 12 10:02:10' +%s)" | bc

또는 쉘 산술 확장:

echo "$(( $(date -d 'Feb 12 10:53:15' +%s) - $(date -d 'Feb 12 10:02:10' +%s) ))"

당신에게 줄 것이다

3065

시간 사이의 초 수입니다. awk여러 번 실행해야 하는 경우 어떻게든 구문 분석할 수 있습니다.

답변2

외부 도우미 유틸리티가 마음에 들지 않으면 내 유틸리티를 살펴보십시오.날짜 도구. 위 작업은 다음과 같이 해석됩니다.

ddiff -i '%b %d %H:%M:%S' 'Feb 12 10:02:10' 'Feb 12 10:53:15'
=> 
  3065s

-i입력 날짜 형식을 설명하는 데 사용됩니다 .

답변3

다른 솔루션은 그렇지 않습니다.bc

1. 날짜를 Unix 시간(POSIX 시간 또는 UNIX Epoch 시간이라고도 함)으로 변환

$ date1=$(date -d "Feb 12 10:02:10" +%s)
$ date2=$(date -d "Feb 12 10:53:15" +%s)

$ printf '%s\n' "$date1" "$date2"
1518447730
1518450795
$ 

2. 두 날짜의 차이를 계산합니다.

$ datediff="$((date2-date1))"

3. 몇 초 안에 답을 얻을 수 있습니다.

$ echo "$datediff"
3065
$

4. 시, 분, 초 형식으로 변환

$ printf '%02dh:%02dm:%02ds\n' $(($datediff/3600)) $(($datediff%3600/60)) $(($datediff%60))
00h:51m:05s

또는

$ TZ=UTC date '+%H:%M:%S' -d"@$datediff"
00:51:05

결과가 ≥86400(예: 24시간)일 가능성에 주의하고 이에 따라 형식을 조정하세요.

관련 정보