function cds2jd, dt, errmsg=errmsg ; ; form output format ; jd = {int:0L,frac:0.0d0} if n_elements(dt) gt 1 then jd = replicate(jd, n_elements(dt)) message='' on_error, 2 ; Return to the caller of this procedure if error occurs. ; ; See if any parameters were passed ; if n_params() eq 0 then begin message = 'Syntax: JD = CDS(DATE-TIME)' goto, handle_error endif ; ; convert input to internal format ; utc = anytim2utc(dt,errmsg=errmsg) if n_elements(errmsg) ne 0 then $ if errmsg(0) ne '' then return, jd ; ERRMSG set in called procedure if utc(0).mjd eq 0 then begin message='Error in determination of Modified Julian Date.' goto, handle_error endif ; ; to CDS external format ; eutc = int2utc(utc,errmsg=errmsg) if n_elements(errmsg) ne 0 then $ if errmsg(0) ne '' then return, jd ; ERRMSG set in called procedure ; ; get integer Julian day for day which starts at noon ; (note that JULDAY is an IDL library function, no ERRMSG keyword can be set) ; for i=0,n_elements(dt)-1 do begin jd(i).int = julday(eutc(i).month,eutc(i).day,eutc(i).year) ; ; was time requested before noon? ; if eutc(i).hour lt 12 then begin jd(i).int = jd(i).int - 1 eutc(i).hour = eutc(i).hour + 12 endif else begin eutc(i).hour = eutc(i).hour - 12 endelse ; ; form fraction of day ; jd(i).frac = eutc(i).hour/24.0d0 + eutc(i).minute/1440.0d0 + $ (eutc(i).second + eutc(i).millisecond/1000.0d0)/86400.0d0 endfor ; ; deliver ; if n_elements(errmsg) ne 0 then errmsg = message return, jd ; ; Error handling point. ; handle_error: if n_elements(errmsg) eq 0 then message, message errmsg = message return, jd ; end