{ Julian Date calculations. These routines were taken from Peter Duffett-Smith's "Astronomy with your Personal Computer". Conversion from line-numbered BASIC to C to ACE-BASIC by David Benn, 2nd,8th,9th April 1993. } SUB julday(caldate$) single m1,y1,a,b,c,d,dj { This routine calculates the number of days elapsed since the epoch 1900 January 0.5 (ie: 1200 GMT, 31st Dec 1899). } '..convert date string (mm-dd-yyyy) into dy,mn,yr dy=val(mid$(caldate$,4,2)) mn=val(mid$(caldate$,1,2)) yr=val(right$(caldate$,4)) if yr = 0 then dj=-1 '..error else m1=mn : y1=yr : b=0 if y1 < 1 then ++y1 if mn < 3 then m1=mn+12 : --y1 if y1 > 1582 or mn > 10 or dy >= 15 then a=int(y1/100) : b=2-a+int(a/4) c=int(365.25*y1)-694025 if y1 < 0 then c=fix((365.25*y1)-0.75)-694025 d=int(30.6001*(m1+1)) dj=b+c+d+dy-0.5 else if (y1<1582 or (y1=1582 and mn<10) or (y1=1582 and mn=10 and dy<5)) then c=int(365.25*y1)-694025 if y1 < 0 then c=fix((365.25*y1)-0.75)-694025 d=int(30.6001*(m1+1)); dj=b+c+d+dy-0.5 else dj=-1 '..error end if end if end if julday = dj '..Return Julian Date (error = -1) END SUB SUB calday$(dj!) single a,b,c,d,g,i,fd { This routine converts the number of (Julian) days since 1900 January 0.5 into the calendar date. } d=dj!+0.5 : i=int(d) : fd=d-i if fd = 1 then fd=0 : ++i if i > -115860 then a=int((i/36524.25)+9.9835726e-1)+14 i=i+1+a-int(a/4) end if b=int((i/365.25)+8.02601e-1) c=i-int((365.25*b)+7.50001e-1)+416 g=int(c/30.6001) : mn=g-1 dy=c-int(30.6001*g)+fd : yr=b+1899 if g > 13.5 then mn=g-13 if mn < 2.5 then yr=b+1900 if yr < 1 then --yr '..return a date string (whole days only) dy$=str$(int(dy)) : if dy < 10 then dy$="0"+right$(dy$,1) dy$=right$(dy$,2) mn$=str$(int(mn)) : if mn < 10 then mn$="0"+right$(mn$,1) mn$=right$(mn$,2) yr$=str$(int(yr)) yr$=right$(yr$,4) calday$ = mn$+"-"+dy$+"-"+yr$ END SUB