본문 바로가기
Old Posts/Linux

[Linux] date 명령 - 과거와 미래 날짜, 시간 계산하기

by A6K 2021. 2. 20.

Bash로 작성되는 스크립트에서 시간 포맷을 명령어 인자로 입력하는 경우가 많다. 현재 시간을 구하는 것은 물론이고 특정 시간에서 '몇 일전', '몇 일후' 같이 날짜 계산을 해야하는 경우도 많다.

시스템의 시간 정보를 얻어 올 수 있는 date 명령의 옵션을 이용하면 쉽게 날짜, 시간 계산을 할 수 있다.

Date 명령

$ date
2021년 2월 11일 목요일 21시 09분 13초 KST

터미널에서 date를 입력하면 현재 시간을 가져올 수 있다.

Date 명령 - '-d' 옵션

리눅스의 경우 date 명령의 -d 옵션을 이용해 과거 시간을 계산해 가져올 수 있다.

date -d 'yesterday'		# 어제
date -d '1 day ago'		# 1일전
date -d '1 week ago'		# 1주일전
date -d '1 month ago'		# 1달전
date -d '1 year ago'		# 1년전
date -d '10 second ago'		# 10초전
date -d '10 minute ago'		# 10분전
date -d '10 hour ago'		# 10시간전
date -d '1 year 2 month ago'	# 1년 2개월전

미래시간을 계산해 가져오고 싶은 경우 'ago'를 빼면 된다.

date -d 'tomorrow'		# 어제
date -d '1 day'		        # 1일후
date -d '1 week'		# 1주일후
date -d '1 month'		# 1달후
date -d '1 year'		# 1년후
date -d '10 second'		# 10초후
date -d '10 minute'		# 10분후
date -d '10 hour'		# 10시간후
date -d '1 year 2 month'	# 1년 2개월후

요일을 기준으로 명시할 수도 있다. 

date -d 'this mondy'    # 이번주 월요일
date -d 'next tuesday'  # 다음 화요일

시간의 단위를 나타내는 day, week, month 등은 복수형을 사용해도되고 단수형을 사용해도 된다. 손가는대로 사용하면 된다.

Date 명령 - 시간 포맷팅

날짜 데이터를 문자열로 처리할 때, 시간 포맷을 다루는게 제일까다롭다. "2021년 2월 20일"이라는 문자열과 "2021-02-20"이라는 문자열은 같은 의미를 갖는다. 하지만 다른 형태로 표현되었다. 이를 처리하기 위해서 날짜 포맷이 사용된다.

예를 들어, 201907232311 같은 형식으로 시간을 출력하고 싶으면 다음과 같이 입력하면 된다.

date '+%Y%m%d%H%M%S' -d '5 minutes ago'

위와 같이 입력하면 5분전 시간을 초단위가지 쭉 이어서 출력하게 된다.

Date 명령 사용 예제

FIVE_MINUTES_AGO=$(date '+%Y%m%d%H%M%S' -d '5 minutes ago')
NOW=$(date '+%Y%m%d%H%M%S')

이와 같이 입력해주면 5분전시간과 현재 시간을 FIVE_MINUTES_AGO, NOW 변수에 설정할 수 있다. 

macOS에서 date 사용

macOS에서 date 명령어에 -d 옵션이 적용되지 않는다. macOS에서 동작하는 스크립트를 작성하기 위해서는 다음과 같이 사용하면 된다.

date -v -1d

-v 옵션에 -1d 를 주면 하루 전, 어제 날짜를 가져오게 된다. -1d 대신 -1M을 입력하면 한달전, -1H를 입력하면 한시간전이 된다. 결과 포맷팅에 사용되는 문자의 시맨틱이 적용된다.

이 결과를 포맷팅하고 싶으면

date -v -1d '+%Y%m%d%H%M%S'

이렇게 입력하면 된다.


 

 

Bash 스크립트 작성 레퍼런스 포스트 모음

Bash 스크립트를 작성할 때 참고할 만한 포스트들을 모아봤다. Bash 문법 [Bash] 조건문 문법, 사용법 및 예제 [Bash] 반복문 문법, 사용법 및 예제 명령어 access curl compress, uncompress dd date df dir dirn..

hbase.tistory.com

 

댓글