Viewing contents of file '../idllib/contrib/buie/caldatm.pro'
;+
; NAME:
; caldatm
; PURPOSE:
; Find year, month, day, hour, minute, second from Julian Date.
; CATEGORY:
; Astronomy
; CALLING SEQUENCE:
; caldatm, jd, y, m, d, hour, min, sec
; INPUTS:
; jd = Julian day number (like 2447000.5). in
; KEYWORD PARAMETERS:
; OUTPUTS:
; y = year (like 1987). out
; m = month number (like 7). out
; d = day of month (like 23). out
; hour = hour of day (like 12). out
; min = minute of day (like 0). out
; sec = second of day (liek 0.0). out
; COMMON BLOCKS:
; NOTES:
; This routine is based on the formulas given in "Astronomical Formulae for
; Calculators," 2nd. ed., by Jean Meeus on pages 23-29. This algorithm
; works for any date in either the Julian calendar (before 1582 October 4)
; or the Gregorian calendar except for negative Julian Day numbers.
;
; MODIFICATION HISTORY:
; M. Buie, 1991 Oct 10, Lowell Observatory
; DWL, August 6, 1993, Modifications to operate with vector input.
;-
pro caldatm,jd,year,month,day,hour,minute,second, help=hlp
if (n_params(0) lt 7) or keyword_set(hlp) then begin
print,' Find year, month, day, hour, minute, second from julian day number.'
print,' caldatm, jd, y, m, d, hour, minute, second'
print,' jd = Julian day number (like 2447000). in'
print,' y = year (like 1987). out'
print,' m = month number (like 7). out'
print,' d = day of month (like 23). out'
print,' hour = hour of day (like 12). out'
print,' min = minute of day (like 0). out'
print,' sec = second of day (like 0.0). out'
return
endif
z = long(jd + 0.5)
a = z
j = WHERE( z GE 2299161L, countj )
if countj ne 0 then begin
alpha = long( ( double(z[j]) - 1867216.25d0 ) / 36524.25d0 )
a[j] = z[j] + 1 + alpha - long( double(alpha) / 4.0d0 )
endif
b = a + 1524
c = long( ( double(b) - 122.1d0 ) / 365.25d0)
d = long( 365.25d0 * double(c) )
e = long( double(b-d) / 30.6001d0 )
year = c
month = e
day = fix(b - d - long( 30.6001d0 * double(e) ))
i = where( e le 13, counti )
j = where( e gt 13, countj )
if counti ne 0 then month[i] = e[i] - 1
if countj ne 0 then month[j] = e[j] - 13
;if e le 13 then month = e - 1 else month = e - 13
i = where( month ge 3, counti )
j = where( month lt 3, countj )
if counti ne 0 then year[i] = c[i] - 4716
if countj ne 0 then year[j] = c[j] - 4715
;if month ge 3 then year = c - 4716 else year = c - 4715
year = fix(year)
month = fix(month)
frac = (jd + 0.5d0 - z) * 24.0d0
hour = fix(frac)
frac = ( frac - hour ) * 60.0d0
minute = fix(frac)
second = ( frac - minute ) * 60.0d0
return
end