반달가면 이글루에서 백업 - http://bahndal.egloos.com/543840
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초전이라는 뜻이다.
'bash script' 카테고리의 다른 글
[bash: function] 함수를 이용한 동시 작업 - 2 (0) | 2023.04.11 |
---|---|
[bash: grep] 특정 문자열 주변의 내용 출력하기 (0) | 2023.04.11 |
[bash: for, sed, echo] txt 파일에서 여러줄로 된 항목을 한줄로 바꾸기 (0) | 2023.04.11 |
[bash: find, awk] 특정 디렉토리에 있는 특정 파일들의 용량 합계 구하기 (0) | 2023.04.11 |
[bash: <<. >] FTP 자동접속 및 전송 결과 확인 (0) | 2023.04.11 |