home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_progs
/
educ
/
planets709.lha
/
caldat.c
next >
Wrap
C/C++ Source or Header
|
1992-08-05
|
1KB
|
50 lines
/*******************************************************************************
** Compute the local date from a given Julian day number. **
*******************************************************************************/
#include <math.h>
#define IGREG 2299161 /* Julian day number of October 15th, 1582 */
void caldat(julian,mm,dd,yyyy)
long julian;
int *mm,*dd,*yyyy;
{
long jalpha,ja,jb,jc,jd,to_long();
if(julian < IGREG) /* Julian calendar */
ja = julian + 1524;
else { /* Gregorian calendar */
jalpha = to_long((julian-1867216.25)/36524.25);
ja = julian + jalpha - to_long(0.25*jalpha) + 1525;
}
jb = to_long(6680.+((ja-2439870)-122.1)/365.25);
jc = 365*jb+to_long(0.25*jb);
jd = to_long((ja-jc)/30.6001);
*dd = (int)(ja-jc-to_long(30.6001*jd));
*mm = (int)jd-1;
if(*mm > 12)
*mm -= 12;
*yyyy = (int)jb-4715;
if(*mm > 2)
--(*yyyy);
if(*yyyy <= 0)
--(*yyyy);
}
/*******************************************************************************
** Compute the local time in (hour, minute) from a given day fraction. **
*******************************************************************************/
void caltim(jd_frac,hour,min)
double jd_frac;
int *hour;
int *min;
{
double x;
x = jd_frac * 24.;
*hour = (int)floor(x);
x -= floor(x);
x *= 60.;
*min = (int)floor(x);
}