다음 두 시간의 시차를 계산하고 싶습니다.
Value1=2016-10-13 14:19:23
Value2=2016-10-13 18:19:23
시간/분 형식으로 차이를 얻고 싶습니다. 빠른 해결책이 있나요?
답변1
GNU 구현을 가정하여 명령 대체를 사용 date
하고 산술 확장을 사용하여 시간 차이를 얻을 수 있습니다.
% Value1='2016-10-13 14:19:23'
% Value2='2016-10-13 18:19:23'
% echo "$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s')))"
14400
결과는 초 단위입니다.
답변2
시간/분/초 단위로 답변:
date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%T'
답변을 얻는 데는 몇 시간/분 밖에 걸리지 않습니다(원래 요청한 대로).
date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%H:%M'
위의 내용은 사용자가 시간과 분의 차이에만 관심이 있고 날짜의 차이는 무시한다고 가정합니다. 대답은 전적으로 원하는 것이 무엇인지에 달려 있습니다.
1일 이상의 차이를 처리합니다.
Value1='2016-10-13 14:19:23'
Value2='2016-10-18 10:34:58'
D1=$(date -d "$Value1" '+%s'); D2=$(date -d "$Value2" '+%s')
echo "$(((D2-D1)/86400)):$(date -u -d@$((D2-D1)) +%H:%M)"
생산하다:
4:20:15
다양한 셸의 경우 Bash에서 다음과 같은 작업을 수행할 수도 있습니다.
declare -i Delta=D2-D1
declare -i Days=Delta/86400
echo "$Days:$(date -u -d@$Delta +%H:%M)"
답변3
$ datediff -f "%H hours and %M minutes" "2016-10-13 14:19:23" "2016-10-13 18:19:23"
4 hours and 0 minutes
datediff는 dateutils 패키지에서 제공됩니다.http://www.fresse.org/dateutils/
이 명령과 달리 date
dateutils는 기본적으로 GMT를 사용하고 로케일을 무시합니다. 이로 인해 일광 절약 시간 조정에 1시간의 차이가 생길 수 있습니다.
비교하다:
$ datediff -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
24:0
그리고
$ datediff --from-zone=Europe/Berlin -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
25:0