Viewing contents of file '../idllib/uit/pro/daycnv.pro'
PRO DAYCNV,XJD,YR,MN,DAY,HR
;+
; NAME:
; DAYCNV
; PURPOSE:
; Converts julian dates to gregorian calendar dates
; CALLING SEQUENCE:
; DAYCNV,XJD,YR,MN,DAY,HR
; INPUTS:
; XJD = Julian date, double precision scalar or vector
; OUTPUTS:
; YR = Year (Integer)
; MN = Month (Integer)
; DAY = Day (Integer)
; HR = Hours and fractional hours (Real). If XJD is a vector,
; then YR,MN,DAY and HR will be vectors of the same length.
; EXAMPLE:
; DAYCNV,2440000.,YR,MN,DAY,HR
; yields YR = 1968, MN =5, DAY = 23, HR =12.
; REVISION HISTORY:
; Converted to IDL from Yeoman's Comet Ephemeris Generator,
; B. Pfarr, STX, 6/16/88
;-
if n_params(0) lt 2 then begin
print,"CALLING SEQUENCE - daycnv,xjd,yr,mn,day,hr
return
endif
sz = size(xjd)
scalar = sz(0) eq 0 ;Scalar input?
;
; Adjustment needed because Julian day starts at noon, calender day at midnight
;
jd = long(xjd) ;Truncate to integral day
if scalar then jd = lonarr(1) + jd
frac = xjd-jd +0.5 ;Fractional part of calender day
after_noon = where(frac ge 1.0)
if !ERR gt 0 then begin ;Is it really the next calender day
frac(after_noon) = frac(after_noon) - 1.0
jd(after_noon) = jd(after_noon) + 1
endif
hr = frac*24.0
l = jd+68569
n = 4*l/146097
l = l-(146097*n+3)/4
yr = 4000*(l+1)/1461001
l = l-1461*yr/4+31 ;1461 = 365.25 * 4
mn = 80*l/2447
day = l-2447*mn/80
l = mn/11
mn = mn+2-12*l
yr = 100*(n-49) + yr + l
if scalar then begin
yr = yr(0) & mn = mn(0) & day = day(0) & hr = hr(0)
endif
return
end