📄 juldate.pro
字号:
PRO JULDATE, DATE, JD, PROMPT = prompt;+ ; NAME:; JULDATE; PURPOSE: ; Convert from calendar to Reduced Julian Date;; EXPLANATION:; Julian Day Number is a count of days elapsed since Greenwich mean noon ; on 1 January 4713 B.C. The Julian Date is the Julian day number; followed by the fraction of the day elapsed since the preceding noon. ;; This procedure duplicates the functionality of the JULDAY() function in; in the standard IDL distribution, but also allows interactive input and; gives output as Reduced Julian date (=JD - 2400000.) ; (Also note that prior to V5.1 there was a bug in JULDAY() that gave ; answers offset by 0.5 days.);; CALLING SEQUENCE:; JULDATE, /PROMPT ;Prompt for calendar Date, print Julian Date; or; JULDATE, date, jd ;; INPUT:; DATE - 3 to 6-element vector containing year,month (1-12),day, and ; optionally hour, minute, and second all specified as numbers; (Universal Time). Year should be supplied with all digits.; Years B.C should be entered as negative numbers (and note that; Year 0 did not exist). If Hour, minute or seconds are not ; supplied, they will default to 0. ;; OUTPUT:; JD - Reduced Julian date, double precision scalar. To convert to; Julian Date, add 2400000. JULDATE will print the value of; JD at the terminal if less than 2 parameters are supplied, or ; if the /PROMPT keyword is set; ; OPTIONAL INPUT KEYWORD:; /PROMPT - If this keyword is set and non-zero, then JULDATE will prompt; for the calendar date at the terminal.;; RESTRICTIONS:; The procedure HELIO_JD can be used after JULDATE, if a heliocentric; Julian date is required.;; EXAMPLE:; A date of 25-DEC-2006 06:25 UT may be expressed as either;; IDL> juldate, [2006, 12, 25, 6, 25], jd ; IDL> juldate, [2006, 12, 25.2673611d], jd ;; In either case, one should obtain a Reduced Julian date of ; JD = 54094.7673611;; PROCEDURE USED:; GETOPT(); REVISION HISTORY; Adapted from IUE RDAF (S. Parsons) 8-31-87; Algorithm from Sky and Telescope April 1981 ; Added /PROMPT keyword, W. Landsman September 1992; Converted to IDL V5.0 W. Landsman September 1997; Make negative years correspond to B.C. (no year 0), work for year 1582; Disallow 2 digit years. W. Landsman March 2000;- On_error,2 if ( N_params() EQ 0 ) and (not keyword_set( PROMPT ) ) then begin print,'Syntax - JULDATE, date, jd or JULDATE, /PROMPT' print, $ ' date - 3-6 element vector containing [year,month,day,hour,minute,sec]' print,' jd - output reduced julian date (double precision)' return endif if ( N_elements(date) EQ 0 ) then begin opt = '' rd: read,' Enter Year,Month,Day,Hour, Minute, Seconds (All Numeric): ',opt date = getopt( opt, 'F' ) endif case N_elements(date) of 6: 5: date = [ date, 0.0d] 4: date = [ date, 0.0d,0.0d] 3: date = [ date, 0.0d, 0.0d,0.0d] else: message,'Illegal DATE Vector - must have a least 3 elements' endcase iy = floor( date[0] ) if iy lt 0 then iy = iy +1 else $ if iy EQ 0 then message,'ERROR - There is no year 0' im = fix( date[1] ) date = double(date) day = date[2] + ( date[3] + date[4]/60.0d + date[5]/3600.0d) / 24.0d; if ( im LT 3 ) then begin ;If month is Jan or Feb, don't include leap day iy= iy-1 & im = im+12 end a = long(iy/100) ry = float(iy) jd = floor(ry*0.25d) + 365.0d*(ry -1860.d) + fix(30.6001d*(im+1.)) + $ day - 105.5d;Gregorian Calendar starts on Oct. 15, 1582 (= RJD -100830.5) if jd GT -100830.5 then jd = jd + 2 - a + floor(a/4) if N_params() LT 2 or keyword_set( PROMPT) then begin yr = fix( date[0] ) print, FORM='(A,I4,A,I3,A,F9.5)',$ ' Year ',yr,' Month', fix(date[1] ),' Day', day print, FORM='(A,F15.5)',' Reduced Julian Date:',JD endif return end ; juldate
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -