본문 바로가기

IT/Unix / Linux

[TIP/AIX] 특정 날짜 구하기

리눅스에서의 날짜 계산은 예약된 파라미터가 존재하여 비교적 쉽게 구할 수 있지만, AIX 는그런 함수가 따로 없다.

따라서 TZ (표준시간대, Time Zone) 라는 값을 수동으로 설정해주어야 되고, dateformat 도 맞춰줘야한다.

여기에 대해서 정리해보도록 하겠다.


* 오늘 날짜는 2015/08/17 이다.



# ymd    당일

ymd=`date +%Y%m%d`


echo $ymd



결과 : 20150817


# ymd10    10일로 고정  

ymd10=`date +%Y%m`'10'


echo $ymd10



결과 : 20150810


# yesterday    어제

t=`expr 24 - 9`

yesterday=`TZ=KST+$t; date +%Y%m%d`


echo $yesterday



결과 : 20150816


AIX 는 날짜를 변환하는데 있어 예약어가 없이 TZ 라는 값을 변환하여 사용한다.

한국의 표준시간대는 KST-9 이며, 어제의 시간을 찾으려면 24를 더해주면 되는데

계산을 쉽게하기 위해서 t 라는 변수값을 활용하였다.


# lastmonth    저번달

t=`expr 24 \* 31 - 9`

lastmonth=`TZ=KST+$t; date +%Y%m`


echo $lastmonth



결과 : 201507


저번달 역시 '어제' 를 구할 때 처럼 TZ 값을 변환해야 한다.

저번달의 '월' 을 구하기 위해서 오늘 날짜 기준으로 1개월의 최대 일수인 31에 24 시간을 곱한 수를

TZ 에 더해주면 저번달의 월을 구할 수 있다.


# lastday2    전달 말일

t=`expr 24 \* 31 - 9`

year=`TZ=KST+$t; date +%Y`

month=`TZ=KST+$t; date +%m`

lastday=`cal $month $year | tr -s " " "\\n" | tail -1`

lastday2=$year$month$lastday


echo $lastday2


결과 : 20150731


업무를 하다보면 배치를 돌리기 위해서 파라미터 값으로 특정한 날을 주어야 되는 경우가 있다.

초일의 경우는 '01' 로 값을 넣으면 되지만, 말일의 경우 28, 30, 31 일이라는 변수가 생겨 이를 쉽게 구분하기가 힘들다.

이를 구분하기 위해서는 위와 같이 조금 심화된 스크립트를 활용하여야 한다.

cal 는 AIX 에서 달력을 보여주는 함수로 이를 위와 같은 스크립트로 활용하면 해당 연월의 마지막 날짜를 구할 수 있다.