작성일:
 
2010. 10. 15. 15:29
 






줄리안 력 (Julian Day)


기원전 4713년 1월 1일 오전 12시가 줄리안 력 0값이다.
그러므로 현재 2010년 10월 15일 값은

IDL> test1=julday(10,15,2010)
       print, test1
               2455485

2455485 라는 값을 가진다.

IDL> test=julday(10,15,2010)-julday(12,31,2000)
IDL> print, test
                3575

배열 사용예
print, julday(1, indgen(13)+4, 2009)
     2454836     2454837     2454838     2454839     2454840     2454841     2454842     2454843     2454844
     2454845     2454846     2454847     2454848
 (2009년 1월 4일 ~ 2009년 1월 16일까지의 값)


* Julian Day는 연월일의 연산이 필요하지만, '가시화'를 하기 위해서는 조더 자세한 데이터가 필요하다.
이때 사용하는 것이 'Caldat' 프로시져 함수이다.

ex) 각각의 월을 Jan,Feb,Mar로 표기하려면?
      CALDAT 프로시저를 사용하지 않고, Julain Day를 연월일시분초로 바꾸는 방법은?

IDL 출력포멧에는 Julian Day를 표현하는 '포멧코드'가 있다.

ex)
day=julday(10,15,2009,17,20,0)
IDL> print, day, format='(D)'
 2455120.2222222229000000
IDL> print, day, format='(C())'
Thu Oct 15 17:20:00 2009

위 괄호에 세부코드를 넣을 수 있다.

ex) CYI=연도 숫자로 표시
숫자 사이사이에 문자열 데이터를 넣을 수 있다.

IDL> print, day, format='(C(CYI03,"/",CMO02,"/"CDI02))'
2009/10/15

data=julday(11,6,2007,15,40,0)
print, data, format='(C(CYI,"년 ",CMOA,"월 ",
결과 -> 2007년 11월 6일 15시 40분


TIMEGEN 문법
results=timegen([D1~~~,D8|,final=value]

D1~D8= 몇개의 날자 생성?
start, final?


ex) 2005년 8월 15일부터 10일을 생성

day=timegen(10start=julday(8,15,2005))
print,days,format='(C())'

ex) 12개의 날짜를 생성
unit='months'

ex) 3개월 간격 날짜 생성
step_size=3, units='months'

ex) 2004년 1월 1일부터 3월 15일까지 매 1일 15일에 해당하는 날짜 생성

day=timegen(10,start=julday(1,1,2004),final=julday(3,15,2004),days=[1,15])
print,days,format='(C())'

문제: 2004년 각 달의 날짜 수를 어떻게 계산?

day1=timegen(12,start=julday(1,1,2004),unit='months')
day2=timegen(12,start=julday(2,1,2004),unit='months')
print,day2-day1

* 여기서는 줄리언 데이가 아닌 일반 '일' 이기 때문에, 포멧문은 사용하지 않는다.
* 포멧문은 오직 줄리언 데이일때만 사용한다.


시스템 현재 시간 (SYSTIME)

현재의 시간을 입력받아 프로그래밍을 수행 (초 단위)

print, systime() or systime(0)
* 1970년 1월 1일 이후에 경과한 시간을 초단위로 보여줌

줄리언 데이를 현재시각으로 표시
print, systime(/julian)
print, systime(/utc)
print, systime()," 한국시간",systime(/utc), " 세계시간 (0시)"

a=systime(1)
b=systime(2)
print, b-a


[20,10]이라는 일차원 배열을 iplot, plot으로 그릴때 각각 얼마나 걸리는가
start=systime(1) & iplot, [20,10] & print, systime(1)-start
start=systime(1) & plot, [20,10] & print, systime(1)-start


iplot은 IDL 8.0에서 사용하는 오브젝트 그래픽, 걸리는 시간은 약 10배 정도차이


현재의 연월일 시분초를 각각 다른변수에 나눠 담으려면

nowtime=systime(/julian)
caldat,nowtime,mon,day,year,hr,min,sec
print,year,mon,day,hr,min,sec




시간 눈금의 그래프 그리기 LABLE_DATA()

시간 계열의 데이터를 다룰때 사용한다.


label_data()키워드

day=timegen(2,start=julday(8,15,2005))
humidity=randomu(seed,5)*50+40  ;습도 랜덤 함수 써서 계산
window,0,xs=500,ys=600
plot,day,humidity
window,1,xs=550,ys=660
plot,day,humidity,xtickformat='label_date'


label_date 포멧 결정

dummy=label_date(date_format=암호문자열)
xtickformat='label_date'

%Y 연4자리수
%Z 연 끝2자리
%M 월문자
%N 월 2자리
%D 일 2자리
%W 요일
%A AM/PM
%H 2자리 (24시간)
%I 분2자리
%S 초 2자리

day=timegen(2,start=julday(8,15,2005))
humidity=randomu(seed,5)*50+40  ;습도 랜덤 함수 써서 계산
dummy=label_date(date_format='%M %D')
plot, day, humidity, xtickformat='label_date'
dummy=label_date(date_format='%Y!C%M %D')
window,1
plot, day, humidity, xtickformat='label_date'


!C의 역할=한줄 넘김