[bash: date] 두 날짜 사이의 시간차 구하기 리눅스 bash script

2014년 7월 11일과 2015년 3월 30일은 며칠 차이가 날까? date 명령을 이용해서 간단하게 계산할 수 있다. 우선 아래의 예시를 보자.

# 2014.7.11 KST -> 1970.1.1 00:00:00 UTC 이후 몇초가 흐른 시점인가?
date -d "20140711" "+%s"
1436540400

date 명령에서 -d 옵션은 현재 시간이 아니라 -d 옵션 이후에 지정된 인자를 기준으로 삼기 위한 것이다. 표시 형식을 "%s"로 지정하면 1970.1.1 00:00:00 UTC 이후 몇초가 지난 시점인지 알려준다.

처음에 제시한 문제로 돌아가서 계산 방법을 생각해 보자. 2014년 7월 11일을 "%s" 형식으로 바꾸고 2015년 3월 30일을 마찬가지로 "%s" 형식으로 바꾼다. 그 다음 두 값의 차이를 구하면 두 날짜의 시간차(단위:초)가 된다.

초 단위의 시간차를 일 단위로 환산하려면 86400으로 나누면 되겠다(1일=86400초). 이 계산은 bc 명령을 이용하면 된다. 아래의 예시를 보자.

# 날짜를 1970.1.1 자정을 기준으로 초 단위로 환산
first_date=`date -d "20140711" "+%s"`
second_date=`date -d "20150330" "+%s"`
# 두 날짜의 차이 계산 (단위: 일)
diff_date=`echo "($second_date - $first_date) / 86400" | bc`
echo "날짜 차이(일): $diff_date"


비슷한 문제를 하나 더 생각해 보자. 2014년 7월 11일 오후 2시 10분 33초와 2015년 3월 30일 오전 11시 35분 11초는 몇시간 차이가 나는 것일까? 초 단위로 계산한 값을 이번에는 3600으로 나누면 된다(1시간=3600초). 아래의 예시를 보자.

first_date=`date -d "20140711 14:10:33" "+%s"`
second_date=`date -d "20150330 11:35:11" "+%s"`
diff_hour=`echo "($second_date - $first_date) / 3600" | bc`
echo "날짜 차이(시간): $diff_hour"


언뜻 보면 위의 계산법이 유효하기 위해 대상 날짜가 반드시 UTC 기준으로 1970년 1월 1일 이후가 되어야 할 것 같기도 하지만, 그 이전의 날짜로도 계산이 다 된다. -d 옵션에서 지정한 날짜가 1969년 12월 31일 이전이라면 "%s" 형식으로 표시할 때 음수(-)로 표시되기 때문이다. 만약 이 값이 -10이라면 1970년 1월 1일 자정이 되기 10초전이라는 뜻이다.



덧글

  • 턱시도가면 2017/07/27 16:07 # 삭제 답글

    큰 도움이 되었습니다. 감사합니다.
  • 반달가면 2017/07/27 21:05 #

    도움 되었다니 다행입니다~
  • 처음 댓글달아봄 2017/08/03 12:06 # 삭제 답글

    원래 눈팅만 하고 댓글 안다는데 진짜 깔끔하게 정리 하셨네요. 큰 도움 됐습니다. 감사합니다.
  • 반달가면 2017/08/03 21:24 #

    도움 되었다니 다행입니다~
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

5191032
5067
1240249

ad_widget_2