linux : date 명령/응용

단순히 오늘 날짜 출력을 넘어서, 며칠 전/후 라든가, 연/월/일 등을 추출하고 싶다면?
잘 정리된 문서도 쉽게 찾을 순 있었지만..

그냥, 오늘 날짜를 출력하기 위해선 date 면 충분하다.

$ date
2020. 10. 19. (월) 15:16:42 KST

그럼 어제 날짜는? 가감은 이런 식으로 하면 된다.

≥ date -d "-1 day"
2020. 10. 18. (일) 15:29:08 KST

≥ date -d "+10 days"
2020. 10. 29. (목) 15:29:25 KST

단수일 땐 day, 복수일 땐 days! 이렇게 써야만 영문법에는 맞겠지만.. 단/복수 상관없이 그냥 day/days 어느 걸 써도 오류가 발생하진 않는다.

** ‘일’을 쓰려면 day, 연/월/일, 시/분/초 모두 영문을 쓰면 된다. year, minute 등등.

여기까지는 ‘오늘’ 날짜 기준. 즉, ‘오늘’을 출력하거나, ‘오늘’보다 며칠 전/후를 계산할 때는 위와같이 하면 되는데, 기준이 오늘이 아니라면?

사실 -d, 즉 –date 는 기준 날짜를 줄 때 사용하는 선택 사항이다.

$ date --date "20-3-31"
2020. 03. 31. (화) 00:00:00 KST

우리나라 식으로 ‘연-월-일’ 이렇게 줘도 되고, 외국(미국?) 식으로 ‘월/일/연’ 이렇게 해도 된다.

그럼, 날짜에서 연, 월, 일을 따로 출력하려면?
즉, 오늘 날짜의 ‘월’은?

+%Y, +%m, +%d 형식을 쓴다. 대소문자 구분을 해야 한다. (자세한 사항은 FORMAT controls the output. 항목 참고)

≥ date "+%Y"
2020

≥ date "+%m"
10

≥ date "+%d"
19

≥ date "+%Y-%m-%d"
2020-10-19

이제 마지막. 위에 설명한 두가지를 한꺼번에 써본다.

‘특정일’을 지정한 뒤, 연/월/일을 출력하려면?

date --date "5/1/20" "+%Y"
2020

‘특정일’에서 날짜를 계산하려면?

date --date "20-4-30 +51 day"
2020. 06. 20. (토) 00:00:00 KST

따옴표 안에 날짜와 계산식이 모두 들어가 있어야 한다.


이제 최종 심화 학습.

특정 날짜에서 45일을 더하고, 그 날짜의 “연-월-일”을 출력하고 싶다. 사실 이걸 하기 위해서 먼 길을 달려왔다.

“특정 날짜”는 프로그램(Shell Script)에서 임의로 지정된다는 가정하에 진행한다.
오류를 확실히 하기 위해, 먼저 틀린 방법을 넣어본다. (이렇게 할 필요가 전혀 없었는데.. 오랜만에 Shell script 를 하다보니 감이 많이 떨어져있었다.)

TODAY_DATE=$(date)
YESTERDAY_DATE=$(date --date "$TODAY_DATE -1 day")

이러면 오류가 발생한다. 첫번째가 아니라 두번째에서.
--date 는 ‘날짜’ 형식으로 인수를 받는데, $TODAY_DATE 는 날짜 뿐만 아니라 시간과 시간대까지 포함하고 있으므로 제대로 처리되지 않는다. 시간까지는 –date 에서 인식을 하지만, 날짜 문자열 형식이 다르고, KST 등이 들어가 있어서 제대로 인식되지 않는 듯 하다.

이렇게 넣으면 문제는 없다.

$ date --date "2020-9-19 14:16:05"
2020. 09. 19. (토) 14:16:05 KST

아무튼, 날짜를 Shell 에서 연산 하려면, ‘날짜’만을 출력하도록 바꿔줘야 한다. 또는 시간이 필요하다면 “연-월-일 시:분:초” 형식을 사용해야 한다.

$ TODAY_DATE=$(date "+%D") # 또는 +%F 도 된다. %F = YYYY-MM-DD
$ YESTERDAY_DATE=$(date --date "$TODAY_DATE -1 day" "+%D")
$ echo $YESTERDAY_DATE
10/18/20

허나.. $YESTERDAY_DATE 는, 굳이 저렇게 할 필요는 없고 그냥 -1 day 만 넣어주면 된다. 즉, 어제를 구하기 위해선,

YESTERDAY_DATE=$(date --date "-1 day" "+%D")

이거면 충분하다.

안녕하세요. 글 남겨주셔서 고맙습니다.