작성일: 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의 역할=한줄 넘김