2009년 11월 19일 목요일

[Unix] Shell 날짜/시간 계산 하기 (date -d -1days, TZ=KST+15 date)


헉. 여태 수동으로 해왔던 내가 너무 초라해졌다.
-d 옵션으로 -ndays하면 된다니..ㅠㅠ바보
제길 -d 옵션이면 뭐든 다된다 +, - 훔..진작알았어야 할것을
man date를 너무 무심하게 봤나보다..ㅠㅠ
(휴. 다행히, 우리 장비와는 다른버전이었다. hp 11.23,
 아래 테스트는 리눅스....version확인해보니 아래와 같다.)
아무튼 리눅스는 이게 된다니 천국이다.
---------------------------------------------------------------------------------
# date --version
date (coreutils) 5.2.1
Written by David MacKenzie.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
---------------------------------------------------------------------------------

# date
Thu Nov 19 22:56:09 KST 2009
# date -d -1months
Mon Oct 19 22:56:23 KST 2009
# date -d +1years
Fri Nov 19 22:56:38 KST 2010
# date -d -1days
Wed Nov 18 22:56:57 KST 2009
# date -d -1minutes
Thu Nov 19 22:56:15 KST 2009
# date
Thu Nov 19 22:57:19 KST 2009
# date -d -1hours
Thu Nov 19 21:57:33 KST 2009
#



date +%C%y%m%d
20090902(금일)
date +%C%y%m%d -d -1days
20090901(어제)


Posted by bumworld
linux l 2009/09/02 17:30




==============================================================
내가 만든 소스도 공유해본다.
==============================================================
#!/bin/ksh

## SET Variable
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
#YEAR=2011
#MONTH=1
#DAY=1

MONTH_NAME=""
SETI=8 # modify you want n times
TEMPI=0 # leave set 1

echo "TODAY IS $YEAR$MONTH $DAY"

## calculate last month's last day #input) $MONTH $1
GET_PMONTH_LDAY()
{
  MONTH=`expr $1 - 1`
  DAY=`cal $MONTH $YEAR | tail +3 | wc -w`
}

## calculate last month #input) $MONTH $YEAR $1 $2
GET_PMONTH()
{
   if [ $1 -eq 1 ] # case - Jan 1st
   then
     YEAR=`expr $2 - 1`
     MONTH=12
   else
     MONTH=`expr $1 - 1`
   fi
}

## calculate yesterday  #input) $DAY $MONTH $YEAR
GET_PDAY()
{
  if [ $2 -eq 1 -a $1 -eq 1 ] # case - Jan 1st
   then
     YEAR=`expr $3 - 1`
     DAY=31
     MONTH=12
  elif [ $1 -eq 1 ] # case - every month 1st day
   then
     GET_PMONTH_LDAY $MONTH
  else # case - Normal day
     DAY=`expr $1 - 1`
  fi
}

#### 월숫자를 Jan 타입으로 변환하기

## Set MONTH_NAME   11->Nov #input) $MONTH $1
GET_MONTH_NAME()
{
  case $1 in
1 ) MONTH_NAME="Jan"
;;
2 ) MONTH_NAME="Feb"
;;
3 ) MONTH_NAME="Mar"
;;
4 ) MONTH_NAME="Apr"
;;
5 ) MONTH_NAME="May"
;;
6 ) MONTH_NAME="Jun"
;;
7 ) MONTH_NAME="Jul"
;;
8 ) MONTH_NAME="Aug"
;;
9 ) MONTH_NAME="Sep"
;;
10 ) MONTH_NAME="Oct"
;;
11 ) MONTH_NAME="Nov"
;;
12 ) MONTH_NAME="Dec"
;;
* ) ;;
esac
}
 
==========================================
Time Zone을 이용하면 HP 장비에서도 된다네.
 
root # date
2010년9월26일 (일), 오후 3시52분58초

root # TZ=KST+15 date
2010년9월25일 (토), 오후 3시53분0초

root # TZ=KST+14 date
2010년9월25일 (토), 오후 4시53분9초

root # TZ=KST+13 date
2010년9월25일 (토), 오후 5시53분11초

root # TZ=KST+12 date
2010년9월25일 (토), 오후 6시53분12초

root # TZ=KST+11 date
2010년9월25일 (토), 오후 7시53분14초

댓글 1개: