제 14 장 날짜와 시간 1/2 전산천문학 2 2007. 가을
연월일로 표시되는 날짜와 시간을 프로그래밍을 이용하여 처리할 수 있다. Mission 연월일로 표시되는 날짜와 시간을 프로그래밍을 이용하여 처리할 수 있다.
다루어야 할 문제 오늘은 2007년 10월 30일입니다. 오늘은 2007년에서 몇일째 되는 날일까요? 그럼 지금으로부터 100일전은 몇월 몇일일까요? 그녀를 만난 날은 2002년 11월 27일입니다. 오늘은 그녀를 만난지 몇일째일까? 2000년 11월 1일부터 2007년 5월 20일까지의 광도가 변하는 식쌍성의 광도 곡선을 그리고 싶다. 가로축을 연월일로 표시하여 광도 곡선을 그리고자 한다. 시간에 따라 변하는 신호를 아래와 같은 그래프로 표현하고자 한다. 20071021123131(YYYYMMDDhhmmss)형식으로 주어지는 100년간의 자료를 이용하여, 원하는 기간 동안의 자료를 추출하고자 한다.
생각해야 할 문제 시간을 숫자로 표시해보자 연월일시분초의 숫자면 되겠지 그럼 더하고 빼기가 가능하다. 20071030152122 + 1 (1초뒤) 200212311159에서 1초 뒤는? 200301010000 30일뒤는 31일 또는 1일? 28일뒤는 29일 또는 1일? 12월 다음은 1월 월은 12진법 시는 24진법 분은 60진법 일은 28일, 29일, 30일, 31일 단위 그때 그때 다르다. 윤년이라는 것도 있는데, 이것도 계산해야 한다. 지금 쓰는 달력을 프로그래밍으로 처리하려면 너무 복잡하다. 심지어는 중간에 율리우스력이나 그레고리력이 사용된 날짜도 고려해야 한다.
그래도 날짜와 시간을 다루어야 하는 것이 현실이다. 그래도 날짜와 시간을 다루어야 하는 것이 현실이다. 그냥 복잡하게 할 것 없이 연산이 가능한 숫자로 만들어 보자. 기준을 정해서 그날부터 지나온 시간을 숫자로 표현하자 !
줄리언 데이 (Julian Day) 우리의 고민을 덜어준 천문학자들의 날짜 계산 방식 기원전 4713년 1월 1일로부터 경과한 일수 4713년 1월 2일 : 2 소수점을 이용하면 시분초까지 표현이 가능
줄리언 데이 기원전 4713년 1월 1일부터 경과한 날 소수점을 이용하여, 시분초 표시 0.1 : 2.4 시간, 144 분 또는 8640초 0.01 : 0.24 시간, 14.4분 또는 864초 전통에 따라 정오를 기준으로 날짜가 변경됨 기원전 4713년 1월 2일 자정 : 0.5 B.C. 4713년 1월 1일의 요일은? 월요일 JD를 7로 나누어서 요일도 알 수 있다.
줄리언 데이 줄리언 데이 계산법 http://en.wikipedia.org/wiki/Julian_day#Calculation a=[(14-month)/12], y=year+4800-a m=month+12a-3 그레고리력 기간(정오기준) 1582년 10월 5일 JDN=day+[(153m+2)/2]+365y+(y/4)-(y/100)+(y/400)-32045 율리우스력 기간 (정오기준) JDN=day+[(153m+2)/2]+365y+(y/4)-32083 JD=JDN+[(hour-12)/24]+(minute/1440)+(second/86400) ★ 1582년 10월 5일부터 15일까지는 교황 그레고리 13세에 의하여 삭제
줄리언 데이 (Julian Day)를 계산하여 프로그래밍하자. 날짜를 줄리언 데이로 줄리언데이를 연월일 시분초로 JULDAY와 CALDAT 함수
training JULDAY 함수 Result=JULDAY(Month, Day, Year, Hour, Minute, Second) 결과는 Double Precision의 Jullian Day IDL> print, julday(1,1,-4713) IDL> print, julday(9, 21, 2006) IDL> print, julday(12,26, 2003) IDL> print, julday(9, 21, 2006)-julday(12,26,2003) IDL> print, julday(1, [1,2,3,4,5], -4713) IDL> print, julday(10, indgen(13)+4, 1582)
training CALDAT 함수 CALDAT, Julian, Month [,Day [,Year [,Hour, [Minute [,Second]]]]] 결과는 월, 일, 연도, 시, 분, 초가 입력한 변수에 저장 IDL> meetday=julday(1, 1, 2004)+100 IDL> caldat, meetday, m, d, y IDL> print, y, m, d IDL> day222=julday(1,1,2004)+221 IDL> caldat, day222, m, d, y IDL> daytime=julday(8, 30, 2005, 3, 50, 17) IDL> caldat, daytime, m, d, y, h, minute, s IDL> print, y, m, d, h, minute, s